当前位置: 首页 > 知识库问答 >
问题:

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

司空皓
2023-03-14

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

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

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

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

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

共有1个答案

冯翔
2023-03-14

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

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

如果返回的是以NUL结尾的C字符串,那么可以使用Native。toString(字节[])转换为字符串

 类似资料:
  • 问题内容: 如何在JavaScript中通过引用传递变量?我要对3个变量执行一些操作,因此我想将它们放在for循环中并对每个变量执行操作。 伪代码: 做这个的最好方式是什么? 问题答案: JavaScript中没有可用的“通过引用传递”。您可以传递一个对象(也就是说,您可以按值传递对一个对象的引用),然后让一个函数修改该对象的内容: 您可以使用数字索引遍历数组的属性,并根据需要修改数组的每个单元格

  • 问题内容: 我花了过去的几个小时在这里和其他地方进行阅读和实验,但是我并没有真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量)。 例如,我将一堆值分配给一个函数中的列表,然后想稍后在另一个函数中使用该列表: 基于对函数参数的作用的理解,我希望这样做如下: 将“列表”初始化为空列表;打电话给main(至少,我知道我没事…) 在defineAList()中,将某些值分配给列表;然

  • 本文向大家介绍详解C++编程中向函数传递引用参数的用法,包括了详解C++编程中向函数传递引用参数的用法的使用技巧和注意事项,需要的朋友参考一下 引用类型的函数参数 向函数传递引用而非大型对象的效率通常更高。 这使编译器能够在保持已用于访问对象的语法的同时传递对象的地址。 请考虑以下使用了 Date 结构的示例: 前面的代码显示通过引用传递的结构的成员是通过成员选择运算符 (.) 访问的,而不是通过

  • 我正在一个java类中运行一个python脚本,如下所示: 问题在于脚本。py通常采用如下命令行参数: Pythonscript.py-i C:/diretory/path-o C:/目录/路径 有可能在Java中通过PythonTeperter传递这些参数吗? 更新: 感谢Juned Ahsan我的代码现在是这样的: 但是脚本仍然没有得到任何参数。 我这样用对了吗?

  • 好吧,所以这是已经问过的问题,但答案似乎没有多大帮助。我能够使用jython和该问题中发布的答案运行python脚本,但我无法传递变量...当我运行程序时,错误说没有像arg1 arg2和arg3这样的变量...我做错了什么? 这是python脚本 现在错误说arg1 arg2和arg3未声明

  • 问题内容: 我有以下代码: 我要解决的问题是这个,我要在 里面 使用。我该怎么做呢? PS:内部的函数在Go中称为回调吗? 问题答案: 您也可以尝试返回一个函数: