<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
如何在你的软件中实时编译并执行C/C++源程序
当人们发布一个软件时, 往往需要提供一些插件接口给OEM进行二次开发,
同时提供若干DLL库或COM组件给用户调用.
在本人看来这些方法能解决一些问题, 但不够灵活, 具有很多缺陷与限制.
这里我给读者提供一个方法: 直接执行C/C++源程序!
执行C/C++源程序的函数是:
int YXB_RunCppCode(char *codebuf,int codelen,int argc,char **argv);
参数
codebuf,codelen
当codelen = 0时, codebuf指向一个文件名,该文件是C/C++源程序或YC执行代码。
当codelen > 0时, codebuf指向一个缓冲区, 该缓冲区存放C/C++源程序或YC执行代码,
缓冲区长度为exe_len字节。
当codebuf表示文件名时, 该函数将文件读入缓冲区并判断它是否是YC执行代码,
如果是则执行它, 执行完后返回0; 如果不是, 则编译它, 若编译出错则将错误信息
存入文件c:/yc01/temp/y.err中并返回非0值, 若编译通过, 则生成YC可执行代码并执行它,
执行完后返回0。
当codebuf表示缓冲区时, 除无需将文件读入外, 执行过程与上述一样.
argc, argv
这两个形式变量将自动被传给C/C++代码中的main函数.
返回值
0 YC_EXE_OK 运行成功
1 YC_EXE_NOTFOUND 文件未找到
2 YC_EXE_COMPILEERR 源代码有错误,编译未通过
3 YC_EXE_VERERR 版本错误
例如: 你要执行的C/C++源程序是run.cpp, 其内容为:
void main(int argc,char **argv)
{
MessageBox(NULL, "hello, world!", "YC01", MB_ICONHAND|MB_OK);
}
那么在YC++中执行run.cpp的程序代码为:
void main(int argc, char **argv)
{
YXB_RunCppCode("run.cpp",0, argc, argv);
}
如果在其它环境, 如VC6.0中, 实时执行run.cpp的程序代码为:
#include <windows.h><br>void main(int argc, char **argv)<br> {<br> HINSTANCE API_Modual = LoadLibrary("yxbapi.dll");<br> int (*YXB_RunCppCode)(char *codebuf,int codelen,int argc,char **argv);<br> YXB_RunCppCode = (int (*)(char *codebuf,int codelen,int argc,char **argv))<br>GetProcAddress(API_Modual,"YXB_RunCppCode");<br> YXB_RunCppCode("run.cpp",0, argc, argv);<br> FreeLibrary(API_Modual);<br> }</windows.h>
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
该例子需将下列几个YC++文件拷入源程序所在目录:
YC01/yxbapi.dll C/C++编译器, 浏览器内核库
YC01/yxbimg.dll 图象, 动画解码库
YC01/yxbext.dll 浏览器内核交互代码库
YC01/yc.ah 编译器头文件包
YC01/yc.cmp 编译器错误信息
YC01/include/ycapi.h 用其它编译器运行该例时所需头文件
YC01/include/yxbapi.lib 用其它编译器运行该例时所需库文件, 如VC6.0
相关推荐
关于C++语言的异常捕获,以及析构函数的使用和实现。
网上众多的开源C/C++代码,因为跨平台的需要,参杂了许多的条件编译语句,对阅读源代码造成了不方便,而且用ctags等工具生成源代码的tags文件时会有些妨碍,本工具就是用来预处理这些条件编译的,将未定义的区域自动...
编译原理书本后面的源程序--PASCAL版
课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有同步的60多个语法错误程序实例)、Turbo C++3.0常见编译错误信息、 Turbo C2.0 中英文编译错误信息同步显示功能、C语言专业词汇...
编译原理 语法分析程序 c/c++编译原理 语法分析程序 c/c++编译原理 语法分析程序 c/c++
同时,为了便于C语言学习,加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有同步的语法错误程序实例、修改方法...
编译原理词法分析与语法分析的c++源程序代码,本程序时模拟编译器的部分功能,即如何进行语法与词法的分析过程!
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、二级 ...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、2004...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、二级 ...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、2004...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、2004...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、2004...
PL/0源程序 //PL0.txt const a=10; var b,c; procedure p; begin c:=b+a end; begin read(b); while b#0 do begin call p;write(2*c);read(b) end end. //outputfile.txt constsym, ident, a eql, number, 10 ...
Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等)、 Turbo C2.0 中英文编译错误信息同步显示功能、Turbo C++3.0常见编译错误信息、C语言专业词汇的中英文对照、二级 ...
加入C语言学习指导、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、Visual C++6.0中英文编译错误信息同步显示功能(并配有60多种同步的语法错误程序实例、修改方法等已免费)、C语言专业...
这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。 PL/0...
* 编译和运行环境 * Visual C++6.0,Visual C++.net and Visual C++.net 2003 * WinNT,Win2000,WinXP and Win2003 * 2gcc version 3.3.2 20031022(Red Hat Linux 3.3.2-1) * Redhat Fedora core 1...