所以我的代码看起来像这样:
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文件中对内联函数进行编码,该函数为每个结构采用两个参数,然后作为代理直到实际函数。
有更好的想法吗?
答案 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)
这正是你所追求的! (如果您感到好奇,请查看引擎盖下的内容 - 它是所有标准的打字用法)。