我有这样的事情:
typedef struct {
char * content;
} Boo;
typedef struct {
Boo **data;
int size;
} Foo;
我希望使用SWIG将Boo ** data
转换为带有Boo
元素(Boo[]
)的数组。然后读取数组(我不想编辑,删除并从Java代码创建一个新数组)。在SWIG文档中介绍了如何使用carrays.i
和array_functions
执行此操作,但结构的成员data
必须是Boo*
类型。我的问题有解决方案吗?
编辑: 我已经匆匆而且忘记写了我想用SWIG生成Java类来与C结构合作。
答案 0 :(得分:3)
解决方案非常简单。只需在swig界面中使用:
%include <carrays.i>
%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);
}
检索数组的内容。
答案 1 :(得分:1)
你总是可以做一个malloc,1d标签的例子是:
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后,你必须在完成选项卡后使用免费
否则,在编译之前将其更改为boo data []或data [] []需要精确数量的struct。