0

我需要使用 lazarus/freepascal 解析 PHP 扩展参数,但我不知道如何将zend_parse_parameterslazarus 中的 C 函数定义为:

int zend_parse_parameters ( int num_args TSRMLS_DC, char* type_spec, ... )

有谁能够帮我?

4

2 回答 2

0
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
于 2013-01-15T00:15:39.643 回答
0

大概是这样的

 uses ctypes;
 function zend_parse_parameters(num_args:cint;type_spec:pchar):cint;cdecl; varargs;

但我不知道如何处理宏(我假设它只是一个将变量部分和 num_args 链接在一起的辅助宏)。

于 2013-01-14T14:30:56.917 回答