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

函数找不到JNA+SiUSBXp

易弘阔
2023-03-14

我试图将JNA与来自SiLabs(siusbxp.dll)的USBXPRESS库一起使用,虽然基本函数工作正常,但SI_GetDeviceProductString函数存在问题。

public class usbxpress 
{

public interface SiUSBXp extends StdCallLibrary 
{
SiUSBXp INSTANCE = (SiUSBXp) Native.loadLibrary("SiUSBXp", SiUSBXp.class);

byte SI_GetNumDevices (IntByReference lpdwNumDevices);
byte SI_GetProductString( int dwDeviceNum, byte[] lpvDeviceString, int dwFlags);
byte SI_Open (int dwDevice, HANDLEByReference cyHandle);
byte SI_GetPartNumber (HANDLE cyHandle, ByteByReference lpbPartNum);        
byte SI_GetDeviceProductString (HANDLE cyHandle, PointerByReference lpProduct, ByteByReference lpbLength, int bConvertToASCII);
//byte SI_GetDeviceProductString (HANDLE cyHandle, LPVOID lpProduct, LPBYTE lpbLength, BOOL bConvertToASCII = TRUE); //original c function
}

public static void main(String[] args) 
{
//checking number of connected devices  
IntByReference lpdwNumDevices = new IntByReference();
SiUSBXp.INSTANCE.SI_GetNumDevices (lpdwNumDevices);        
System.out.println(lpdwNumDevices.getValue());

//opening the device
HANDLEByReference dev_handle_ref = new HANDLEByReference();
byte status = SiUSBXp.INSTANCE.SI_Open(0, dev_handle_ref);
System.out.printf("Status %d\n", status);

HANDLE device_handle = dev_handle_ref.getValue();

//checking part number
ByteByReference lpbPartNum = new ByteByReference();
SiUSBXp.INSTANCE.SI_GetPartNumber(device_handle, lpbPartNum);
System.out.printf("Part number is CP210%d\n", lpbPartNum.getValue());      

//checking product string - does not work
PointerByReference lpProduct = new PointerByReference();
ByteByReference lpbLength = new ByteByReference();
SiUSBXp.INSTANCE.SI_GetDeviceProductString(device_handle, lpProduct, lpbLength, 1);
}}

当我尝试运行它时,我得到以下错误:

> Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'SI_GetDeviceProductString': at com.sun.jna.Function.<init>(Function.java:179) 
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:391) 
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:371) 
at com.sun.jna.Library$Handler.invoke(Library.java:205) 
at $Proxy0.SI_GetDeviceProductString(Unknown Source)
byte SI_Write (HANDLE cyHandle, PointerByReference lpBuffer, int dwBytesToWrite, IntByReference lpdwBytesWritten, Pointer o);
...
SiUSBXp.INSTANCE.SI_Write (device_handle, lpBuffer, message.length, lpdwBytesWritten, null);

所以问题是由别的东西引起的,但它仍然存在。

共有1个答案

俞飞鸣
2023-03-14

我已经通过使用在Internet上找到的SiUSBXp库的旧版本解决了这个问题。从SiLabs网站下载的较新版本表现得很奇怪--有时SI_GetDeviceProductString函数在依赖项Walker中可见,有时不可见,而旧版本则很好。

 类似资料:
  • 我正在尝试使用可视化工作室创建一个dll文件,并在java项目中使用/访问它。库似乎被加载了,但总是抛出相同的异常:线程“主”java.lang.中的异常不满意链接错误:查找函数“函数”时出错:找不到指定的过程。我的C / C技能不是最好的,所以问题可能就在那里。我试图编辑h和cpp文件,使用类,命名空间,静态方法和在网络上找到的其他人员,但无所事事。我也看到其他帖子谈论Depency Walke

  • null UnsatisfiedLinkError:查找函数“test”时出错:一个megadott eljárás nem található. 在com.sun.jna.function.(function.java:245),在com.sun.jna.nativelibrary.getfunction(nativelibrary.java:566),在com.sun.jna.nativeli

  • 我为我的文本分析项目运行lucene库(我对java相对较新)。主功能(或命令)有问题。 我使用的lucene版本是3.0.0,已经编译成JAR文件。JAR文件与主类文件Indexer.java位于同一文件夹中。 我首先运行编译代码: 它工作正常,创建了索引器。类文件位于同一目录中。 然后我运行同样的命令: 这次命令行输出说我没有主类Indexer: 我检查了原始的java代码,其中定义了main

  • 问题内容: 我的MyBatis映射有问题。我有一个像这样的领域类: 一个映射器类,具有如下方法: 在数据库中,三列的类型分别为Number,Timestamp和Clob,并且名称与类字段中的名称相同。 当我使用此方法时,我得到一个: ExecutorException:在[MyClass;中找不到构造函数。 匹配[java.math.BigDecimal,java.sql.Timestamp,or

  • 我正在按照本指南安装 Azure Functions 并创建一个应用:https://learn.microsoft.com/en-us/azure/azure-functions/functions-run-local 当我运行命令时,我应该得到这样的输出: 但是我得到了这个: 翻译:“找不到文件”。 我已经安装了链接中提到的所有内容,但它不起作用。它创建了名为“.vscode”的文件夹,其中包

  • 问题内容: 我已经安装了Jquery和Jquery-ui 这些文件位于node_modules目录中。我有一个声明Jquery的组件 我的jquery函数工作正常,但jquery-ui函数却不能。 因此,显然我对jquery-ui的包含是不正确的。我尝试在我的.angular-cli.json页面中包含许多不同的内容,但均未成功。 我在.angular-cli文件中尝试过的事情: 我尝试直接导入到