我正在尝试将 Java 中的 C++ 库与 JNA 结合使用。在库的头文件中,我有以下方法声明:
extern "C" const char** foo(void* bar);
返回数组的长度是已知的,其中单个元素的可能最大长度也是已知的。如何在 Java 中映射和使用此函数?我尝试了以下 Java 声明:
String[] foo(Pointer bar);
Pointer foo(Pointer bar);
StringArray foo(Pointer bar);
当我调用 foo
时,它们都会导致以下错误:
Exception in thread "main" java.lang.Error: Invalid memory access
(这个问题与 this question 有关,但不完全相同。)
最佳答案
Pointer foo(Pointer bar)
就是你想要的,然后用Pointer
方法提取你想要的数据。
Memory data = new Memory(256);
Pointer p = foo(data);
Pointer[] parray = p.getPointerArray(0);
for (Pointer p : parray) {
System.out.println(p.getString(0));
}
无效的内存访问可能是由于您传递了一些未按照被调用方期望的方式格式化的数据。
关于java - 如何使用 JNA 将函数返回字符串数组 (const char**) 映射到 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36575838/