使用SWIG从Java访问结构中的指针数组
我有这样的事情:
typedef struct { char * content; } Boo; typedef struct { Boo **data; int size; } Foo;
我想将Boo ** data
转换为带有Boo
Java中Boo
元素( Boo[]
)的数组。 然后读取数组(我不想编辑,删除并从Java代码创建一个新数组)。 在SWIG文档中描述了如何使用carrays.i
和array_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。