6

我有这样的事情:

typedef struct {
    char * content;
} Boo;

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

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

编辑:我赶时间,忘记写我想用 SWIG 生成 Java 类以与 C 结构配合。

4

2 回答 2

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);
}

检索数组的内容。

于 2012-08-14T14:32:42.563 回答
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 之后,你必须在完成选项卡后使用 free

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

于 2012-08-14T12:55:13.913 回答