我有一个像这样的 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。
长型有什么陷阱吗?看起来很奇怪吧?