使用JNA将C DLL中的char *映射到Java

时间:2009-08-03 07:08:53

标签: java visual-c++ jna

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

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

4 个答案:

答案 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)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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