填充并将结构数组传递给Java

时间:2013-01-17 21:48:34

标签: java c++ jna

我早上花了大部分时间尝试使用JNA从Java填充并将一系列填充的结构传递给C ++。我有大量基于JNA的代码运行,我觉得这应该很简单,但我无法弄清楚或找到一个不使用@deprecated函数的例子。我怀疑这是微不足道的,当有人给我看时我会感到愚蠢,但我真的很感激一些帮助。

我尝试过的一些背景知识: 我不知何故怀疑它很重要,但在学习了如何手动编写接口文件(并让它们工作)后,我切换到了JNAerator。 JNAerator翻译

MyStruct* mine

MyStruct mine
在Java中

。这让我感到困惑,因为在Java中,这只能用于指向单个对象。有一次,我看着使用

MyStruct** mine

转换为

PointerByReference mine

但这似乎有点过分,因为我不需要修改结构,或者再次访问它们。从这一点开始,我已经尝试了所有我能想到的东西,但是我从来没有成功地发送过比第一个结构更多的东西。

1 个答案:

答案 0 :(得分:0)

重新阅读你的问题(将结构从Java传递到C ++)之后,你可以做以下事情:

// Assuming a native signature like this:
// call_native_function(MyStruct** struct_list, int count)

MyStruct.ByReference[] list = new MyStruct.ByReference[SIZE];
for (int i=0;i < list.length;i++) {
    list[i] = new MyStruct.ByReference();
    // Initialize the struct as needed
}
// Call whatever native method...
nativeLibrary.call_native_function(list, list.length);

另请参阅JNA FAQ