我正在使用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 *。
最佳答案
字符串是LPCSTR的适当映射。 JNA将使用默认平台编码将修改后的UTF16字符转换为NUL终止的字节缓冲区。
您可以尝试改为传入一个显式字节数组(使用上面建议的替代方法映射),这样可以消除出现编码错误的可能性,例如
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };
您可以通过设置系统属性“ jna.encoding”来更改使用的编码。
您还应该消除“ LPCSTR”实际上是错误类型的可能性;如果函数期望它可以写入的缓冲区,则String将不起作用,并且如果它实际上是LPTCSTR并且您正在使用UNICODE,则需要传递WString来代替。