gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:51 25 4
gpt4 key购买 nike

我正在尝试编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com