3

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

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

MyStruct* mine

MyStruct mine

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

MyStruct** mine

这转化为

PointerByReference mine

但这似乎有点矫枉过正,因为我不需要修改结构,也不需要再次访问它们。从那时起,我已经尝试了所有我能想到的东西,但我从来没有成功发送比第一个结构更多的东西。

4

1 回答 1

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 常见问题解答

于 2013-01-18T20:21:32.883 回答