SWIG,无法长时间创建类型映射*

时间:2013-10-30 08:54:26

标签: swig

我有一个像这样的C函数:

int make_call(char* to, int *call_id);

和一个非常简单的界面文件:

%include "typemaps.i"
%include "enums.swg"
%include "arrays_java.i"

%header %{
#include <my_header.h>
%}

/* Map "int*" as input & output */
%apply int *INOUT  { int * };

这很好用。在我的SWIG文件中,我得到: public static int make_call(String to,int [] call_id){..} 我可以用一个元素来创建一个int []。到目前为止一切都很好。

然而,由于call_id可能非常大,所以需要很长时间,所以我在C API中对此进行了更改,并将此行添加到.i文件中:

%apply long *OUTPUT  { long * };

我尝试了几种变体,包括尝试应用SWIG的java.html doc中所说的内容,但我总是最终生成一个int [] beeing或者很长时间我无法使用Java的swigtype 。我只是无法让它产生我期待的长[]。

我试过把它变成这样的双倍:

%apply double *OUTPUT  { double * };

它按预期工作,我在生成的界面中得到了double [] call_id。

长型是否有任何陷阱?这看起来很奇怪吗?

1 个答案:

答案 0 :(得分:4)

尝试以下方法之一:

unsigned long
unsigned int
long long