PHP的Swig包装C:参数中的类型错误,预期为SWIGTYPE_p_p_double

时间:2019-04-12 15:11:20

标签: php c swig

我正在使用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]
[...]

如果这些部分还不够,我肯定可以提供重现它的步骤。

我不是马上就做,因为我很确定问题仅在于我缺乏理解,所以我希望您能使我朝正确的方向前进。

修改1

根据要求添加一些信息。 不幸的是,我认为我的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 定义,以前省略了我认为这超出了范围。

0 个答案:

没有答案