所以我有这样的代码:

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的所有标准用法)。

07-28 03:12