C 编写动态链接库PHP DLL
新建-》工程-》win32 Dynamic Link Library->一个简单的dll工程
只有在函数前标注:extern? ?"C"? ?_declspec(dllexport) 的函数才能被其他的程序通过dll的方式调用
(1) 静态链接声明:
?然后就可以像调用普通函数一样调用了。如果dll中函数很多的话,一般都是由dll开发者开发好.h文件,把函数的声明都写好,然后供其他人调用,只要include就好了。
(2) 动态链接:
//有__cdecl __stdcall 等不同的调用约定,也就是参数的压栈顺序等,暂时不用关心,只要保证调用的时候和dll中的调用约定一样就可以。声明函数指针 typedef int(__cdecl*? FunctionAdd)(int,int);
PHP_FUNCTION(hello){ char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } len = spprintf(&strg, 0, "Hello,%s", arg); RETURN_STRINGL(strg, len, 0);}?
编译:
8、运行cmd命令行,进入d:\php_src\ext\linvo目录
9、输入 msdev linvo.dsp /MAKE "linvo - Win32 Release_TS"
10、如果没有错误,则在php_src目录下会生成一个Release_TS文件夹,里面就是编译好的php_linvo.dll扩展?
使用:
11、将其拷入运行环境中的php扩展目录ext
12、编辑php.ini添加extension=php_linvo.dll,重启apache
13、在php文件中执行如下语句
echo hello('Linvo');
将输出
Hello,Linvo
14、通过echo phpinfo();也可看到扩展已加载的信息?
通过VC6打开项目空间文件编译DLL,此时会php_stream_transport.h报错
d:\php_src\main\streams\php_stream_transport.h需要通过添加typedef int socklen_t;到文件中,便可通过编译