2

我有一个 C++ DLL,我需要调用它返回的函数char*。我在本机声明中使用字符串,但得到类似????或一些废话的输出。我必须解码字符串吗?我已经像这样设置了我的系统属性:

 System.setProperty("jna.encoding","UTF-8");
4

4 回答 4

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* 传递给 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);
于 2010-06-10T15:11:31.243 回答
0

如果原始字符串是 unicode,jna.encoding 将不起作用。您需要改用 com.sun.jna.WString,或查看示例 W32API 映射以了解如何将 unicode (wchar_t*) 字符串自动映射到 String。

于 2009-08-26T14:57:49.943 回答
0

您是否使用Native.toString()将字符串转换回Java?

于 2009-09-06T15:47:06.937 回答
0

尝试使用指针而不是字符串,然后使用指针的 getString(long offset) 方法来获取字符串,如果设置,它会隐式使用 jna.encoding。

于 2010-04-20T21:14:51.707 回答