如何将可变字节数组传递给DLL函数(通过JNA访问)?

时间:2015-07-23 08:39:03

标签: java c++ string dll jna

我应该注意到我是Java的初学者,我想将我用Delphi编写的项目转移到Java。我需要使用我正在使用的硬件附带的DLL。 DLL具有从设备获取信息和向设备发送信息的功能,这些功能都是用C ++编写的。该设备本质上是某种控制器。我正在使用Java Native Access(JNA)访问DLL函数并将其映射到Java,这在大多数情况下都是自动处理的。

DLL具有很少的函数,需要将字符串作为参数传递,并且该函数应该修改此字符串。这是DLL文档文件中描述的示例函数。

int GetVersionStr(char *pcVers, int lMaxLen);

该函数将字符串作为参数,使用当前版本的设备修改此字符串,我可以在任何我想要的地方使用该字符串。我最初是通过传递一个字符串在Delphi中编写这个项目时实现的。但是在Java中,正如我所发现的,字符串是不可变的。我了解到通常StringBuilder完成工作。但是,JNA似乎无法将StringBuilder与C ++等效的string或char *类相匹配。如果我可以干扰JNA的类匹配代码来做这样的事情

my_c++_string = my_java_string_build.toString()

并使用StringBuilder的“toString()”方法将我的StringBuilder对象均衡为C ++字符串对象,问题最有可能得到解决。但我真的不知道如何做到这一点。任何和所有解决方案都将受到欢迎。提前谢谢。

0 个答案:

没有答案