执行函数YC_cppRun()
该函数可直接执行c/c++和Javascript源代码。
int YC_cppRun(
const char *srcbuf, //文件名或代码地址
int srclen=0, //0或代码长度
int argc=0, //传给源代码主函数main()的第一个形式参数
void *argv=NULL //传给源代码主函数main()的第二个形式参数
);
参数:
srcbuf, srclen
当srclen等于0时,srcbuf是c/c++源代码的文件名
当srclen大于0时,srcbuf是源代码缓冲区,srclen是源代码长度。
argc, argv
传给源码主函数main()的两个参数,其意义由源码自行定义。
返回值:
如果函数运行成功,返回值为0,
如果失败,返回非0值。
1. 用YC_cppRun()执行缓冲区源代码
#include <string.h>
#include "ycapi.h"
void main()
{
char *sptr = "void main(int argc,char *argv) \
{ \
printf(`%d - %s`,argc,argv); \
}";
YC_cppRun(sptr, strlen(sptr), 2019, "断肠人在天涯\n");
}
c/c++代码文件: fox.cpp
编译:用YC命令: ycc fox.cpp 或VC++命令: cl fox.cpp 生成fox.exe
运行:在cmd界面执行fox.exe后,输出下列文字:
2019 - 断肠人在天涯
2. 用YC_cppRun()执行C/C++源码文件
void main(int argc,char *argv[])
{
if(argc > 4)
{
*(double*)argv[4] = 3.1415926;
argc--;
}
for(int ii=0; ii<argc; ii++) printf("argv[%d] = %s\n",ii,argv[ii]);
}
c/c++文件: big.cpp
#include <stdio.h> //定义函数printf()的头文件. 用于VC等, YC编译器会自动包含
#include "ycapi.h" //定义函数YC_cppRun()的头文件. 用于VC等, YC编译器会自动包含
void main()
{
double pval;
char *argv[] = {"五岭逶迤腾细浪","乌蒙磅礴走泥丸", //设置形参之值
"金沙水拍云崖暖","大渡桥横铁索寒", (char*)&pval};
int argc = sizeof(argv) / sizeof(argv[0]); //设置形参个数
YC_cppRun("big.cpp",0,argc,argv); //用形参(argc,argv)执行c/c++文件big.cpp
printf("pval = %.7f\n",pval);
}
c/c++文件: sky.cpp
编译:用YC命令: ycc sky.cpp 或VC++命令: cl sky.cpp 生成 sky.exe
运行:在cmd界面执行sky.exe,将输出下列文字:
argv[0] = 五岭逶迤腾细浪
argv[1] = 乌蒙磅礴走泥丸
argv[2] = 金沙水拍云崖暖
argv[3] = 大渡桥横铁索寒
pval = 3.1415926
3. 用YC_cppRun()执行Javascript源代码文件
var t1 = new Date();
var res = 0;
function fibonacci(i)
{
if(I < 2) return i;
res += 2.1;
res += Math.tan(i)
res += Math.cos(i);
res += Math.sin(i);
return fibonacci(i-2) + fibonacci(i-1);
}
document.write(fibonacci(32)); document.write("<br>\n")
document.write("res=" + res); document.write("<br>\n")
document.write(new Date() - t1); document.write("<br>\n")
Javascript代码文件: rain.js
#include <stdio.h>
#include <ycapi.h>
void main()
{
printf("begin running...\n\n");
YC_cppRun("rain.js"); //执行Javascript文件
printf("\nend.");
}
c/c++代码文件: snow.cpp
编译:用YC命令: ycc snow.cpp 或VC++命令: cl snow.cpp 生成 snow.exe
运行:在cmd界面执行snow.exe后,输出下列文字:
begin running…
2178309<br>
res=-1255767.7334986837<br>
809<br>
end.
编译:用YC命令: ycc rain.js 生成 rain.exe,
运行:在cmd界面执行rain.exe后,输出下列文字:
2178309<br>
res=-1255767.7334986837<br>
797<br>
4. 用YC_cppRun()执行exe文件
YC_cppRun()函数也可以执行exe文件,如:
void WinMain()
{
YC_cppRun(`"C:/Program Files/Internet Explorer/iexplore.exe" %1`
` http://www.ycbro.com`);
}
c/c++代码文件: wind.cpp
编译:用YC命令: ycc wind.cpp 生成 wind.exe,
运行:在cmd界面执行wind url后,将运行默认浏览器打开指定网页url。
运行状态
YC_cppRun(“file.exe”) 窗口状态
YC_cppRun(“file.exe”,-1) DOS状态
5. 使用YC_cppRun()函数的文件
yced.cpp
YC_cppRun("ycmb.cpp",0,1,bdata);
YC_cppRun("ycmerge.cpp",0,0,&mbuild)
YC_cppRun("ycvm.cpp",0,0,&mbuild);
YC_cppRun("ycde.cpp",0,0,&mbuild);
ycweb.cpp
int errval = YC_cppRun("ycofn.cpp",0,0,&ofm);
ycwin.cpp
YC_cppRun("yctest.cpp");
ycos.cpp
YC_cppRun("bochs.exe -q -f ycos.src",-1); //执行 bochs.exe 模拟器