繁体   English   中英

JNA在Windows平台上映射LPCSTR

[英]JNA mapping LPCSTR on windows platform

我正在使用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来代替。

您是否尝试过将其映射到字节数组,如下所示:

short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM