如何使用 JNA 将返回字符串数组 (const char**) 的函数映射到 Java?

How to map function returning array of strings (const char**) to Java with JNA?

我正在尝试将 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

(此问题与 有关,但不完全相同。)

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));
}

无效的内存访问可能是由于您传入了一些未按照被调用方预期的方式格式化的数据。