Java / C ++ SWIG - 使用数组参数调用函数

时间:2014-08-05 20:40:28

标签: java c++ swig

所以我的代码看起来像这样:

bool doSomething( unsigned int x, const myStruct1 typeOne[2], myStruct2 typeTwo[2] );

使用swig我得到java代码:

public static boolean doSomething(long x, myStruct1 typeOne, myStruct2 type2){}

我想要的是:

public static boolean doSomething(long x, myStruct1[] typeOne, myStruct2[] type2){}

我知道问题是SWIG不能知道Java中的数组只是2个元素,因为java声明是无规则的。

我已尝试在swig界面中使用carrays.i。我使用了arrays_fuctions指令但它并没有改变方法签名。

我的下一个想法是在SWIG文件中对内联函数进行编码,该函数为每个结构采用两个参数,然后作为代理直到实际函数。

有更好的想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用现有的" arrays_java.i" SWIG库文件。

该文件中有一个名为JAVA_ARRAYSOFCLASSES的宏,可以用作:

%module test

%include <arrays_java.i>

JAVA_ARRAYSOFCLASSES(myStruct1);
JAVA_ARRAYSOFCLASSES(myStruct2);

struct myStruct1 {};
struct myStruct2 {};

bool doSomething(unsigned int x, const myStruct1 typeOne[2], myStruct2 typeTwo[2]);

生成以下Java函数:

public static boolean doSomething(long x, myStruct1[] typeOne, myStruct2[] typeTwo)

这正是你所追求的! (如果您感到好奇,请查看引擎盖下的内容 - 它是所有标准的打字用法)。