我在我的应用程序中嵌入PHP(在Delphi 2010中编写),使用PHP4Delphi组件与php5ts.dll连接.我想我的程序充当PHP(sapi模块?)的扩展,因为它注册了一些可以在PHP脚本中使用的函数和常量......无论如何,在使用简单数据类型时效果很好,但是当我尝试使用多维数组时作为返回值我得到错误
Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
堆栈列表
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7
php4delphi.pas中的第1497行是调用的 tsrm_shutdown();
对我来说,它看起来像垃圾收集器在脚本结束时崩溃,所以我怀疑我没有正确地将数据发送回引擎...因此我的问题是如何将多维数组发送回PHP?
我正在使用的模式是
var subArray: pzval;
_array_init(return_value, nil, 0);
for x := 0 to Data.Count-1 do begin
subArray := MAKE_STD_ZVAL;
_array_init(subArray, nil, 0);
// populate subarray with data, including other subarrays
...
// add subarray to the main array
add_index_zval(return_value, x, subArray);
end;
Run Code Online (Sandbox Code Playgroud)
我是否必须"注册"我创建的子阵列?我必须增加或减少refcount或设置is_ref?IOW,如何设置子数组的return_value和zvals? …
首先这是关于php4Delphi而不是RadPHP(以前的Delphi For PHP).
运用
当试图在IIS/PHP服务器上运行php4Delphi delphi_math.dll示例扩展时,我在C:\ Windows\Temp\php-errors.log文件中看到以下错误.
[15-Jun-2011 17:58:42] PHP警告:PHP启动:无法加载动态库'C:\ Program Files(x86)\ PHP\ext\delphi_math.dll' - 动态链接库(DLL)初始化例行失败.在第0行的未知中
我已经解决了PHP的初始问题,没有找到我的扩展,因此它不是路径样式问题.
我认为php4Delphi 7.2可能不支持最新的PHP 5.3.6.有谁有这个配置为他们工作?