找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6149|回复: 1

[分享] 在你的vc项目下集成PHP:Embed PHP Lib

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2011-6-12 09:37:36 | 显示全部楼层 |阅读模式

写了个VC调用PHP Sapi 的dll。

功能:
1.在你的vc、.net程序中嵌入PHP代码
2.查看PHP的op-code


用法说明:
LinxPHPEmbedLib.dll导出4个函数:

1.extern "C" __declspec(dllexport) void Test();
说明:测试函数。在cmd下运行"rundll32 LinxPHPEmbedLib.dll,Test >phpinfo.htm",如过看到生成了phpinfo.htm文件,则表示该dll可正常使用。注意不可省略" >phpinfo.htm"


2.extern "C" __declspec(dllexport) char * EvalEx(char *str,int *p_str);
说明:调用php引擎运行str后,返回 call main();的内容。相当于 eval($str);return main();
demo:
int addr=0;
char *code2 = "$a=123;function main(){global $a;return $a;}";
ret = (*p_EvalEx)(code1,&addr);
    printf("%s\n",ret); //将会打印123
(*p_Del)(addr);

3.extern "C" __declspec(dllexport) char *  GopEx(char *str,int *p_str);
说明:把char *str编译成PHP OP-code,并返回op-code的内容。

4.extern "C" __declspec(dllexport) void Del(int i);
说明:释放dll返回的资源。


下载:
Linx PHP Embed Lib.rar :http://blogimg.chinaunix.net/blog/upfile2/100328230444.rar


演示代码:

typedef char * ( *EvalEx)(char *str,int* addr);
typedef char * ( *GopEx)(char *str,int* addr);
typedef char * ( *Del)(int addr);
EvalEx p_EvalEx;
GopEx p_GopEx;
Del p_Del;

int main(int argc, char* argv[])
{
char *code1 = "echo 'hello,world!';";
char *code2 = "$a=123;function main(){global $a;return $a;}";

    char *engineDllPath = "LinxPHPEmbedLib.dll" ;
if (!GetModuleHandleA(engineDllPath))
{
LoadLibraryA(engineDllPath);
}

HMODULE hModule=GetModuleHandleA(engineDllPath);
if (!hModule)
{   
printf("no hModule");
return 0;
}
p_EvalEx=(EvalEx)GetProcAddress(hModule,"EvalEx");
p_GopEx=(GopEx)GetProcAddress(hModule,"GopEx");
p_Del=(Del)GetProcAddress(hModule,"Del");

char *ret ;
int addr=0;

ret = (*p_EvalEx)(code1,&addr); //在命令控制台下可以看到输出hello,world!
printf("%s\n",ret); //由于code1没有main函数,返回值为空
(*p_Del)(addr);

ret = (*p_GopEx)(code2,&addr);
printf("%s\n",ret); //得到main()返回"123"
(*p_Del)(addr);

    //编译code2
ret = (*p_GopEx)(code2,&addr);
printf("%s\n",ret);
(*p_Del)(addr);

    //编译a.php.(tip:如果代码以“file://”开头,GopEx函数会直接编译该文件。记得PHP文件要以“<?php”开头。)
ret = (*p_GopEx)("file://a.php",&addr);
printf("%s\n",ret);
(*p_Del)(addr);


来源:http://hi.baidu.com/linx2008/blo ... 77975df819b88e.html
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-22 23:02:19 | 显示全部楼层
很好 很 我来坐沙发
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表