我正在尝试编写一个Java小程序来连接条形码扫描程序并读取数据。条形码扫描器附带一个dll文件,其中包含访问它的功能。我没有很多Java经验,但我已经想出如何使用JNA加载DLL并调用本机函数。一些功能工作正常,但返回实际条形码的功能似乎无法正常工作。它需要一个字符数组作为参数,并且通过引用传递不在JNA中,我尝试使用Pointer类并且无法获得任何工作。本机函数定义如下。
NoMangle long DLL_IMPORT_EXPORT csp2GetPacket(char szBarData [],long nBarcodeNumber,long nMaxLength)
在函数调用之后,szBarData []变量应该包含条形码数据。
我尝试过几种不同的方式设置JNA映射,使szBarData []参数成为char数组,字符串,字节数组和指针,并且没有运气。
在visual basic中你可以传递szBarData []一个字符串并且它可以工作,只是不确定如何使用JNA在Java中实现这一点。
答案 0 :(得分:1)
由于您希望目标函数填充缓冲区,因此无法传递String
(只读),但必须传递byte[]
另外,请确保您没有使用Java long
来表示原生long
;为此目的存在类NativeLong
。
如果你得到的是NUL终止的C字符串,那么你可以使用Native.toString(byte[])
转换为String
。