delphi – 与zend(多维数组)交换数据
我将PHP嵌入我的应用程序(在Delphi 2010中编写),使用PHP4Delphi组件与php5ts.dll进行接口。
我想我的程序作为PHP(sapi模块?)的扩展,因为它注册了一些可以在PHP脚本中使用的函数和常量…无论如何,使用简单的数据类型时效果很好,但是当我尝试使用多维数组作为返回值我得到错误 访问冲突在模块’php5ts.dll’中的地址01CD3C35。阅读地址0231E608。 php4delphi.pas中的第1497行是调用tsrm_shutdown(); 对我来说,看起来垃圾收集器在脚本结束时崩溃,所以我怀疑我不会将数据正确地发送回引擎… 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,0); // populate subarray with data,including other subarrays ... // add subarray to the main array add_index_zval(return_value,x,subArray); end; 我必须在某个地方“注册”我创建的子阵列吗?我是否必须增加或减少引用计数或设置is_ref? IOW,子阵列的return_value和zval必须如何设置? 我还将数据作为数组发送到我的函数中,然后使用zend_hash_find,zend_hash_get_current_data等来读取数据。这可能会混淆变量的引用吗?那么当我完成它后,我必须减少由zend_hash_find返回的变量的refcout吗? var Val: pppzval; new(Val); zend_hash_internal_pointer_reset(aZendArr^.value.ht); for x := 1 to zend_hash_num_elements(aZendArr^.value.ht) do begin zend_hash_get_current_data(aZendArr^.value.ht,Val); // read data from Val to local variable and do something with it zend_hash_move_forward_ex(aZendArr^.value.ht,nil); end; Dispose(Val); 还是应该每次循环创建/释放Val? TIA 解决方法
这是我的工作
function InitSubArray(TSRMLS_DC : pointer):pzval; begin Result := MAKE_STD_ZVAL; Result^.refcount:=2; Result^._type:=IS_ARRAY; InitPHPArray(Result,TSRMLS_DC); end; 设置引用2为我解决问题,我不知道为什么,只是尝试了很多次,并发现了这一点。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |