我早上花了大部分时间尝试使用JNA从Java填充并将一系列填充的结构传递给C ++。我有大量基于JNA的代码运行,我觉得这应该很简单,但我无法弄清楚或找到一个不使用@deprecated函数的例子。我怀疑这是微不足道的,当有人给我看时我会感到愚蠢,但我真的很感激一些帮助。
我尝试过的一些背景知识: 我不知何故怀疑它很重要,但在学习了如何手动编写接口文件(并让它们工作)后,我切换到了JNAerator。 JNAerator翻译
MyStruct* mine
到
MyStruct mine
在Java中。这让我感到困惑,因为在Java中,这只能用于指向单个对象。有一次,我看着使用
MyStruct** mine
转换为
PointerByReference mine
但这似乎有点过分,因为我不需要修改结构,或者再次访问它们。从这一点开始,我已经尝试了所有我能想到的东西,但是我从来没有成功地发送过比第一个结构更多的东西。
答案 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。