在Java JNA中向本机函数传递引用变量

在Java JNA中向本机函数传递引用变量,java,jna,Java,Jna,我正在尝试编写一个Java小程序来连接条形码扫描仪并读取数据。条形码扫描仪附带一个dll文件,其中包含访问该文件的函数。我对Java没有太多经验,但我已经知道如何使用JNA加载dll并调用本机函数。有些函数工作得很好,但返回实际条形码的函数我似乎无法使用。它将字符数组作为参数,而按引用传递不在JNA中,我尝试过使用指针类,但无法实现任何功能。本机函数定义如下 NoMangle long DLL_导入_导出csp2GetPacket(字符szBarData[],长nBarcodeNumber,长n

我正在尝试编写一个Java小程序来连接条形码扫描仪并读取数据。条形码扫描仪附带一个dll文件,其中包含访问该文件的函数。我对Java没有太多经验,但我已经知道如何使用JNA加载dll并调用本机函数。有些函数工作得很好,但返回实际条形码的函数我似乎无法使用。它将字符数组作为参数,而按引用传递不在JNA中,我尝试过使用指针类,但无法实现任何功能。本机函数定义如下

NoMangle long DLL_导入_导出csp2GetPacket(字符szBarData[],长nBarcodeNumber,长nMaxLength)

函数调用后,szBarData[]变量应该包含条形码数据

我尝试了几种不同的方法设置JNA映射,将szBarData[]参数设置为字符数组、字符串、字节数组和指针,但都没有成功


在visual basic中,您可以向szBarData[]传递一个字符串,它可以工作,只是不知道如何使用JNA在Java中实现这一点。

因为您希望目标函数填充缓冲区,所以不能传递
字符串(只读),而必须传递
字节[]

还要确保您没有使用Java
long
来表示本机
long
;类
NativeLong
就是为了这个目的而存在的


如果您得到的是以NUL结尾的C字符串,那么您可以使用
Native.toString(byte[])
转换为
字符串

尝试在java中传递“char[]”。这很管用,我根据我看到的另一个论坛尝试使用byte[],但我一直得到随机返回的内容。我尝试使用了两个不同的toString()函数,但结果相同,我从未在任何其他论坛或文档中遇到过原生的.toString(),但它工作得非常完美。非常感谢你!!请随意贡献一个文档补丁!