我有一个像这样的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。
长型是否有任何陷阱?这看起来很奇怪吗?
答案 0 :(得分:4)
尝试以下方法之一:
unsigned long
unsigned int
long long