使用JNA将const char**映射到Java类型 我尝试在java中使用C++的JNA库。在库的头文件中,我有以下方法声明: extern "C" void foo(const char** bar);
参数使用JNA将const char**映射到Java类型 我尝试在java中使用C++的JNA库。在库的头文件中,我有以下方法声明: extern "C" void foo(const char** bar);,java,c++,jna,Java,C++,Jna,参数bar应该传递给fooempty,并且foovill将给它分配一个我想用Java检索的值。应该如何设置相应的Java方法声明(例如,我应该将bar映射到什么Java类型),以及如何使用它 我尝试了以下Java声明: void foo(String bar); void foo(String[] bar); void foo(Pointer bar); 当我调用foo时,它们都会导致以下错误: 线程“main”java.lang中出现异常。错误:内存访问无效 在下面找到一个小片段 libfo
bar
应该传递给foo
empty,并且foo
vill将给它分配一个我想用Java检索的值。应该如何设置相应的Java方法声明(例如,我应该将bar
映射到什么Java类型),以及如何使用它
我尝试了以下Java声明:
void foo(String bar);
void foo(String[] bar);
void foo(Pointer bar);
当我调用foo
时,它们都会导致以下错误:
线程“main”java.lang中出现异常。错误:内存访问无效
在下面找到一个小片段 libfoo.cpp
#include <stdio.h>
extern "C" void foo(const char** bar);
void foo(const char** bar) {
for (int i = 0; bar[i] != '\0'; i++) {
fprintf(stdout, "%s\n", bar[i]);
}
}
编译所有源代码
gcc -c -fPIC libfoo.cpp -o libfoo.o
gcc -shared -o libfoo.so libfoo.o
javac -cp jna-4.2.1.jar LibFooDemo.java
运行Java程序
java -Djava.library.path=. -cp jna-4.2.1.jar:. LibFooDemo
输出
foo
bar
foobar
遵循Javadoc
字符串[]
。如果您获得了源代码,您将在/www
中获得最新文档。链接文档建议String[]
使用char**
。这是const char**
有什么区别吗?使用String[]
会给我问题中提到的错误。@在测试了更多的错误后,结果发现使用String[]
有效-我只是因为一个不相关的错误而无法让它工作。如果你想根据你的评论写一个答案,请随意写。否则我会写一个自我回答。谢谢。我用一个简短的例子补充一个答案。
foo
bar
foobar