我有一个C ++的DLL,我需要调用它返回char*
的函数。我在本机声明中使用String,但得到像????
或某些垃圾一样的输出。我必须解码字符串吗?我已经设置了我的系统属性:
System.setProperty("jna.encoding","UTF-8");
答案 0 :(得分:2)
import com.sun.jna.*;
char *从C方法返回:
Pointer myFunc();
Pointer ptr = myFunc();
String str = ptr.getString(0);
str = str.substring(0, str.indexOf(0)); //Remove garbage after null char
char * Param传入C方法:
void myFunc(Pointer ptr);
String str = "hello world";
Memory mem = new Memory(str.length());
mem.write(0, str.getBytes(), 0, str.length());
myFunc(mem);
答案 1 :(得分:0)
答案 2 :(得分:0)
您是否使用Native.toString()
将字符串转换回Java?
答案 3 :(得分:0)
尝试使用Pointer而不是String,然后使用指针的getString(long offset)方法获取字符串,如果设置则隐式使用jna.encoding。