我有一个 C++ DLL,我需要调用它返回的函数char*
。我在本机声明中使用字符串,但得到类似????
或一些废话的输出。我必须解码字符串吗?我已经像这样设置了我的系统属性:
System.setProperty("jna.encoding","UTF-8");
我有一个 C++ DLL,我需要调用它返回的函数char*
。我在本机声明中使用字符串,但得到类似????
或一些废话的输出。我必须解码字符串吗?我已经像这样设置了我的系统属性:
System.setProperty("jna.encoding","UTF-8");
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* 传递给 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);
如果原始字符串是 unicode,jna.encoding 将不起作用。您需要改用 com.sun.jna.WString,或查看示例 W32API 映射以了解如何将 unicode (wchar_t*) 字符串自动映射到 String。
您是否使用Native.toString()
将字符串转换回Java?
尝试使用指针而不是字符串,然后使用指针的 getString(long offset) 方法来获取字符串,如果设置,它会隐式使用 jna.encoding。