我需要使用拉撒路/ FreePascal的解析PHP扩展的参数,但我不知道如何在拉撒路的定义C函数zend_parse_parameters
:如何将zend_parse_parameters从C++转换为pascal?
int zend_parse_parameters (int num_args TSRMLS_DC, char* type_spec, ...)
任何人可以帮助我吗?
我需要使用拉撒路/ FreePascal的解析PHP扩展的参数,但我不知道如何在拉撒路的定义C函数zend_parse_parameters
:如何将zend_parse_parameters从C++转换为pascal?
int zend_parse_parameters (int num_args TSRMLS_DC, char* type_spec, ...)
任何人可以帮助我吗?
大概就像
uses ctypes;
function zend_parse_parameters(num_args:cint;type_spec:pchar):cint;cdecl; varargs;
,但我不知道做什么用宏做的(我认为这仅仅是一个辅助宏变量部分和num_args连接在一起)。
here is my test code of lazarus under CENTOS6.3:
procedure encryptext (ht : integer; return_value : pzval; this_ptr : pzval;
return_value_used : integer; TSRMLS_DC : pointer); cdecl;
var
getmyparameters: function(argu_num:integer;
type_apec:pansichar;Args : Array of const):integer;cdecl;
a:integer;
rtnstr:string;
begin
if (PHPLib < 1) then exit;
getmyparameters := GetProcAddress(PHPLib, 'zend_parse_parameters');
if (@getmyparameters = nil) then
begin
raise EPHP4DelphiException.Create('zend_parse_parameters');
exit;
end;
if ht < 1 then
begin
zend_wrong_param_count(TSRMLS_DC);
Exit;
end;
a := 1;
if (getmyparameters(ht,pansichar('s'),[pansichar(rtnstr),@a]) <> SUCCESS) then exit;
ZVAL_STRING(return_value,pansichar(rtnstr),true);
end;
php code of /var/www/html/a.php:
<?php
echo encryptext('hello');
?>
the error message is:
PHP Warning: encryptext() expects exactly 0 parameters, 1 given in /var/www/html/a.php on line 2
什么是TSRMLS_DC?看起来像一些非标准C修饰符 –
它是一个PHP宏,PHP示例代码如下:PHP_FUNCTION(exif_tagname) { \t long tag; \t char * szTemp; (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC,“l”,&tag)== FAILURE){ \t \t \t return; \t} \t szTemp = exif_get_tagname(tag,NULL,0,tag_table_IFD TSRMLS_CC); \t if(tag <0 ||!szTemp ||!szTemp [0]){ \t \t RETURN_FALSE; \t} \t RETURN_STRING(szTemp,1) } – profh