访问从Java结构内的指针数组与痛饮
问题描述:
我有这样的事情:访问从Java结构内的指针数组与痛饮
typedef struct {
char * content;
} Boo;
typedef struct {
Boo **data;
int size;
} Foo;
我想Boo ** data
转换为与Boo
元素(Boo[]
)在Java中使用SWIG的数组。然后读取数组(我不想编辑,删除并从Java代码创建一个新的数组)。在SWIG文档中描述了如何使用carrays.i
和array_functions
来完成此操作,但结构的成员data
必须是Boo*
。有没有解决我的问题?
编辑: 我匆匆忙忙,我忘了写我想用SWIG生成Java类来与C结构合作。
答
该解决方案非常简单。就在痛饮接口使用:
%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);
}
检索阵列的内容。
答
你总是可以做一个malloc,例如一维选项卡将是:
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你的标签做
否则以后就必须使用自由,将其更改为嘘在编译之前,data []或data [] []将需要精确数量的结构库存。
+0
方法对不起。我没有写下正确的问题。你能再读一遍吗? – 2012-08-14 13:03:40
除非你给'Foo'增加一个长度,否则这听起来完全不可能,因为你不能单独从指针中神奇地推导出长度。 – unwind 2012-08-14 12:36:30
@unwind对不起,我忘了添加'size'成员。我编辑了我的问题。 – 2012-08-14 12:39:30
假设您的数据结构中有3个以上的元素。你将如何访问第三个元素?假设你有一个对象'Foo x',其中'x.size> = 3'。 – pmg 2012-08-14 12:45:56