使用JNA将C DLL中的char*映射到Java 我有一个C++的DLL,我需要调用它的函数,它返回代码> char */COD>。我在本机声明中使用字符串,但得到的输出像?或一些垃圾东西。我必须解码字符串吗?我已将我的系统属性设置为: System.setProperty("jna.encoding","UTF-8");

使用JNA将C DLL中的char*映射到Java 我有一个C++的DLL,我需要调用它的函数,它返回代码> char */COD>。我在本机声明中使用字符串,但得到的输出像?或一些垃圾东西。我必须解码字符串吗?我已将我的系统属性设置为: System.setProperty("jna.encoding","UTF-8");,java,visual-c++,jna,Java,Visual C++,Jna,如果原始字符串是unicode,则jna.encoding将无效。您需要改为使用com.sun.jna.WString,或者查看示例W32API映射,了解如何将unicode(wchar_t*)字符串自动映射到字符串。是否使用Native.toString()将字符串转换回Java?尝试使用指针而不是字符串,然后使用getString(长偏移量)方法来获取字符串,如果设置了,则隐式使用jna.encoding import com.sun.jna.*; char*从C方法返回: Pointer

如果原始字符串是unicode,则jna.encoding将无效。您需要改为使用com.sun.jna.WString,或者查看示例W32API映射,了解如何将unicode(wchar_t*)字符串自动映射到字符串。

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

尝试使用指针而不是字符串,然后使用getString(长偏移量)方法来获取字符串,如果设置了,则隐式使用jna.encoding

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
void myFunc(Pointer ptr);
String str = "hello world";
Memory mem = new Memory(str.length());
mem.write(0, str.getBytes(), 0, str.length());
myFunc(mem);
char*参数传递到C方法:

Pointer myFunc();
Pointer ptr = myFunc();
String str = ptr.getString(0);
str = str.substring(0, str.indexOf(0));  //Remove garbage after null char
void myFunc(Pointer ptr);
String str = "hello world";
Memory mem = new Memory(str.length());
mem.write(0, str.getBytes(), 0, str.length());
myFunc(mem);