我正在使用SWIG为C++库编写JNI包装器.库中的一个方法返回已分配内存中的结构数组:
typedef struct {
int id;
double x;
double y;
} DataStruct;
int get_all_data ( long ref, DataStruct **ppdata, size_t *psize ) {
// ... prepare the data by the ref
*ppdata = (DataStruct*) malloc(sizeof(DataStruct) * size);
*psize = size;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
java中的方法签名应如下所示:
native DataStruct[] get_all_data(long ref);
Run Code Online (Sandbox Code Playgroud)
因此,我希望SWIG在java中生成java DataStruct并调用库方法的包装器,然后在JVM中创建一个Dataray的jarray,并用从库返回的DataStruct结构初始化的DataStruct对象填充它,最后释放由ppdata.
我一直试图绕过SWIG类型图一段时间,我现在看到的唯一解决方案是使用%native指令并完全手动创建JNI实现.在这种情况下,我能从SWIG获得至少一些帮助吗?