所以我有这样的代码:
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文件中编写一个内联函数,该内联函数为每个结构采用两个参数,然后充当实际函数的代理。
还有更好的主意吗?
最佳答案
您可以使用现有的“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)
这正是您所追求的! (如果您好奇的话,请在幕后看一看-这是Typemap的所有标准用法)。