gpt4 book ai didi

java - JNA 与 native 代码的通信

转载 作者:行者123 更新时间:2023-12-01 05:51:42 25 4
gpt4 key购买 nike

我有这个 native 函数,当我将设备连接到我的系统时,我在 JNA 中得到空值,我认为我在使用 JNA 进行 LPVOID 映射时遇到问题,任何想法都会受到赞赏。

CP210x_GetProductString( DWORD DeviceNum,LPVOID DeviceString,DWORD Options)
  1. DeviceNum — 需要产品描述字符串、序列号或完整路径的设备索引。
  2. DeviceStringCP210x_DEVICE_STRING 类型的变量,返回以 NULL 结尾的序列号、设备描述或完整路径字符串。
  3. Options - 确定 DeviceString 是否包含产品说明、序列号或完整路径字符串的标志

JNA 代码:

public class Helloworld {

public interface CLibrary extends Library{
CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
(Platform.isWindows() ? "CP210xManufacturing.dll" : "c"),
CLibrary.class);

int CP210x_GetProductString(int dn,String [] ds,int op);
}

public static void main(String[] args) {
int dn=0;
String dsc = new String[100];
if(CLibrary.INSTANCE.CP210x_GetProductString(dn, dsc,
CP210x.CP210x_RETURN_SERIAL_NUMBER) == CP210x.CP210x_SUCCESS){
{
for(int i=0;i<dsc.length;i++)
System.out.print(dsc[i]);
}

}
}
}

最佳答案

不知道这是否有效,但来自 this description CP210x_GetProductString 我认为你必须将长度为 256 的 byte[] 传递给函数(用于填充字符串的缓冲区)。

 int CP210x_GetProductString(int dn,byte[] ds,int op);

//use it like this
byte[] rawString = new byte[256];
int dn = ...;
int op = ...;
CP210x_GetProductString(dn,rawString,op);
//You might have to choose a different Charset here
//since I don't know what encoding the string uses I used the default
String product = new String(rawString,Charset.defaultCharset());

关于java - JNA 与 native 代码的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497853/

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