首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows平台上JNA映射LPCSTR

windows平台上JNA映射LPCSTR
EN

Stack Overflow用户
提问于 2010-11-17 19:18:23
回答 2查看 1.8K关注 0票数 2

我正在使用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 *。

EN

回答 2

Stack Overflow用户

发布于 2011-12-11 22:08:44

字符串是LPCSTR的适当映射。JNA将使用默认平台编码将修改后的UTF16字符转换为以NUL结尾的字节缓冲区。

您可以尝试传入一个显式字节数组(使用上面建议的替代方法映射),这将消除不正确编码问题的可能性,例如

代码语言:javascript
复制
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };

您可以通过设置系统属性"jna.encoding“来更改所使用的编码。

您还应该排除"LPCSTR“实际上是一个不正确类型的可能性;如果函数需要一个可以写入的缓冲区,字符串将无法工作,如果它实际上是LPTCSTR,而您使用的是UNICODE,那么您需要传递一个WString。

票数 3
EN

Stack Overflow用户

发布于 2010-11-19 00:43:52

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

代码语言:javascript
复制
short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4203807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档