使用SWIG从Java访问结构中的指针数组

我有这样的事情:

typedef struct { char * content; } Boo; typedef struct { Boo **data; int size; } Foo; 

我想将Boo ** data转换为带有Boo Java中Boo元素( Boo[] )的数组。 然后读取数组(我不想编辑,删除并从Java代码创建一个新数组)。 在SWIG文档中描述了如何使用carrays.iarray_functions执行此array_functions ,但struct的成员data必须是Boo*类型。 我的问题有解决方案吗?

编辑:我匆匆忙忙,我忘记写了我想用SWIG生成Java类来与C结构合作。

解决方案非常简单。 只需在swig界面中使用:

 %include  %array_functions(Boo *, boo_array); 

然后从java访问:

 SWIGTYPE_p_p_Boo results = foo.getData(); for(int i = 0; i < foo.getSize(); i++) { Boo booResult = foo.boo_array_getitem(results, i); } 

检索数组的内容。

你可以随时做一个malloc,例如1d tab会是:

 int main (void) { int size; Foo a; size = 2; if (!(a.data = malloc(size * sizeof(*(a.data))))) return (-1); // so you will have a.data[0] or a.data[1] ... // for malloc on 2d // if (!(a.data[0] = malloc(size * sizeof(*(a.data))))) // return (-1); return 0; } 

但是,自从启动malloc后,必须在完成选项卡后使用free

否则,在编译之前将其更改为boo data []或data [] []将需要精确数量的struct stock。