我正在使用Swig封装第三方C库并将其作为共享的PHP扩展加载。
调用包装函数时遇到问题,错误是:
在func_name的参数2中键入错误。在[...]
中应为SWIGTYPE_p_p_double
我尝试阅读Swig文档的相关部分以及我能找到的尽可能多的示例,但是我不知道C还是有很多疑问。
我想知道如何将php类型的参数声明为:
double const *const *inputs
所述函数在库头文件( library.h )中具有此签名:
int func_name(int size,
double const *const *inputs,
double const *options,
double *const *outputs);
Swig界面( library.i )
%module module_name
%include "carrays.i"
%array_functions(double, doubleArray);
%{
#include "library.h"
%}
%include "library.h"
我可以看到Swig在生成的 library_wrap.c 文件中定义了错误中报告的类型:
/* -------- TYPES TABLE (BEGIN) -------- */
[...]
#define SWIGTYPE_p_p_double swig_types[6]
[...]
如果这些部分还不够,我肯定可以提供重现它的步骤。
我不是马上就做,因为我很确定问题仅在于我缺乏理解,所以我希望您能使我朝正确的方向前进。
根据要求添加一些信息。 不幸的是,我认为我的php代码距离答案很远,很简单:
$data_in = new_doubleArray(2); // surely wrong
doubleArray_setitem($data_in, 0, 5);
doubleArray_setitem($data_in, 0, 10);
$options = new_doubleArray(1);
$out = new_doubleArray(1); // surely wrong, too
func_name(10, $in, $options, $out)
据我了解, $ in 和 $ out 应该是数组数组,在这里我使用 new_doubleArray()只是因为我设法这样做是为了正确调用另一个函数,该函数需要使用double数组作为参数。
注意:我也编辑了 library.i ,添加了 carrays 包含项和 doubleArray 定义,以前省略了我认为这超出了范围。