2

我有一个像这样的 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 * };

我已经尝试了几种变体,包括尝试将 java.html 文档中的内容应用于 SWIG,但我总是最终生成一个 int[] 蜜蜂,或者可能是我无法从 Java 使用的长期 swigtype。我只是无法让它产生我期待的 long[] 。

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

%apply double *OUTPUT  { double * };

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

长型有什么陷阱吗?看起来很奇怪吧?

4

1 回答 1

4

尝试以下之一:

unsigned long
unsigned int
long long
于 2013-10-31T08:42:05.343 回答