我正在使用JNA开发call one DLL api for C/C++。DLL中的函数接口是短DKT_init(LPCSTR name)。我将相应的java方法设置为public short DKT_init(字符串名);但是当我调用它时,DLL API返回一个参数错误。我想知道如何在JNA中映射LPCSTR?因为LPCSTR是cons char *,而String是char *。
发布于 2011-12-11 22:08:44
字符串是LPCSTR的适当映射。JNA将使用默认平台编码将修改后的UTF16字符转换为以NUL结尾的字节缓冲区。
您可以尝试传入一个显式字节数组(使用上面建议的替代方法映射),这将消除不正确编码问题的可能性,例如
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };您可以通过设置系统属性"jna.encoding“来更改所使用的编码。
您还应该排除"LPCSTR“实际上是一个不正确类型的可能性;如果函数需要一个可以写入的缓冲区,字符串将无法工作,如果它实际上是LPTCSTR,而您使用的是UNICODE,那么您需要传递一个WString。
发布于 2010-11-19 00:43:52
您是否尝试过将其映射为字节数组,如下所示:
short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());https://stackoverflow.com/questions/4203807
复制相似问题