java - 在 Java JNA 中向 Native Function 传递引用变量

标签 java jna

我正在尝试编写一个 Java 小程序来连接到条形码扫描仪并读取数据。条形码扫描仪附带一个 dll 文件,其中包含访问它的函数。我对 Java 没有太多经验,但我已经弄清楚如何使用 JNA 加载 dll 并调用 native 函数。有些功能工作正常,但返回实际条形码的功能似乎无法工作。它需要一个字符数组作为参数,并且通过引用传递不在 JNA 中,我尝试过使用 Pointer 类,但没有任何效果。原生函数定义如下。

NoMangle 长 DLL_IMPORT_EXPORT csp2GetPacket ( char szBarData[],long nBarcodeNumber,long nMaxLength )

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

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

在 Visual Basic 中,您可以向 szBarData[] 传递一个字符串并且它可以工作,只是不确定如何使用 JNA 在 Java 中完成此操作。

最佳答案

由于您希望目标函数填充缓冲区,因此您不能传递String(只读),而必须传递byte[]

还要确保您没有使用 Java long 来表示 native longNativeLong 类就是为了这个目的而存在的。

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

关于java - 在 Java JNA 中向 Native Function 传递引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611596/

相关文章:

java - 如何使用正则表达式或其他技术解析该字符串?

java - GCC/LD 链接 JNA 无法识别的损坏符号

java - 写入文件时JNA无效的内存访问

java - Bamboo 升级 5.5->5.7 后 AIX 代理失败

java - 升级到 Spring 3 后启动缓慢

java - 给定两个图点,确定第二个点相对于第一个点的方向

java - java 中的 MAGIMAGEHEADER

java - JNA 示例程序 java.lang.NoClassDefFoundError

java - jsp页面只显示字符串中的一个单词

java - 奇怪的异常传播到主线程