我正在使用 JNA 为 C/C++ 调用一个 DLL api。DLL 中的函数 API 是短 DKT_init(LPCSTR 名称)。我将相应的 java 方法设为 public short DKT_init(String name); 但是当我调用它时,DLL API 返回一个参数错误。我想知道如何在 JNA 中映射 LPCSTR?由于 LPCSTR 是 cons char * 但 String 是 char *。
问问题
1831 次
2 回答
3
字符串是 LPCSTR 的适当映射。JNA 将使用默认平台编码将修改后的 UTF16 字符转换为以 NUL 结尾的字节缓冲区。
您可以尝试传入一个显式字节数组(使用上面建议的替代方法映射),这将消除错误编码问题的可能性,例如
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };
您可以通过设置系统属性“jna.encoding”来更改使用的编码。
您还应该消除“LPCSTR”实际上是错误类型的可能性;如果该函数需要一个可以写入的缓冲区,则 String 将不起作用,如果它实际上是 LPTCSTR 并且您使用的是 UNICODE,那么您需要传递一个 WString 来代替。
于 2011-12-11T14:08:44.130 回答
1
您是否尝试过将其映射到字节数组,如下所示:
short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
于 2010-11-18T16:43:52.170 回答