【发布时间】:2013-11-19 11:31:47
【问题描述】:
我正在用 C 编写一个 PHP 扩展,它调用 Fortran 库中的子例程。我可以调用需要int 或double 参数的子例程,但我不知道如何传递字符串。这是 Fortran 子程序源的 sn-p(我无法更改):
Subroutine abcdef(stringA)
Character *(*) stringA
.................
.................
Return
End Subroutine abcdef
这是我在 C 扩展中的尝试:
extern void abcdef_(char *strA, int *size);
PHP_FUNCTION(abcdef)
{
char *_strA;
int size;
/* Arguments Parsing */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
&_strA, &size) == FAILURE)
{
RETURN_NULL();
}
abcdef_(_strA, &size);
return;
}
也许我在搜索错误的东西,但我发现这方面的信息非常稀缺。我是否认为Character *(*) 只是一个指向字符数组的指针?我已经为参数尝试了许多不同的组合,但似乎无法做到正确。有时当我调用它的程序段错误时,有时 PHP 没有显示错误但子程序没有效果。
由于我能够从我的扩展程序中调用带有 int 和 double 参数的例程,并且从 Fortran 调用该例程时工作正常,我认为这一定是我传递字符串的方式,但只是找不到正确的方法。
【问题讨论】: