php7.4使用FFI连接C语言的动态库

注意php7.4支持的FFI只支持对动态库里的C接口的调用,并不支持C++。
网上看了一篇文章很受益:PHP FFI详解 - 一种全新的PHP扩展方式
我总结的代码就来自这篇文章,所以此文不能算原创了。
首先,我用Visual C++6.0(我就喜欢这种小的软件)绿色版,开发了一个dll扩展,开发扩展的方法见文章:《Visual C++6.0编写Win32动态库》。
将dll拷贝到我的Thinkphp6项目的extend目录里了。然后php写代码:

$dll = root_path() . 'extend' . DIRECTORY_SEPARATOR . 'MisDll.dll';
		$lib = \FFI::cdef(<<<CTYPE
			int test(int zh,int ych);
			CTYPE, $dll);
		echo "DLL TEST输入结果14则代表运行正常,结果:" . $lib->test(2, 12);

页面访问看到输入结果为14,就代表成功了。

对了,别忘记php手动开启对ffi的支持:
放开extension=ffi的注释,还有修改ffi.enable=true,重启即可。

注意:PHP FFI详解 - 一种全新的PHP扩展方式介绍的可以预加载的功能,在windows里并不被支持!你调试的时候看到php的错误信息就知道了。在Linux里看来可以,看来运行php还是在Linux效率高啊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章