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

标签 java c++ 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

(这个问题与 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/

相关文章:

c++ - 保证用于序列化目的的 reinterpret_cast 输出

c++ - 尝试使用 cilkplus 在 gcc 上运行 cilkscreen/cilkview

java - 如何从android中的普通类调用main_activity的方法

java - 如何在外部 Java 监听器中访问 getSupportFragmentManager

c++ - 如何将 boost::posix_time::ptime 与毫秒进行比较?

Java JNA 写入内存 boolean 值

java - 如何使用 JNA 将 java 原始数组传递给 C dll?

java - 尝试使用 Spring JdbcTemplate 从 Java 访问 OS400/DB2 存储过程输出参数

java - 格式化字符串以查找和替换段

java - 如何访问输出参数值