我有一个DLL文件,我试图通过JNA通过Java程序调用它的功能
但问题是它无法找到我的DLL文件并抛出以下异常:
java.lang.UnsatisfiedLinkError: Unable to load library 'UsbDll': The specified module could not be found.
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:199)
at com.sun.jna.Native.register(Native.java:1018)
at com.MainClass.<clinit>(MainClass.java:15)
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)
以下是我的计划:
package com;
import com.sun.jna.Native
public class MainClass {
static {
Native.register("UsbDll");
}
public native int method();
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
我的dll文件的名称是UsbDll.dll,我的操作系统是Windows.
============================ EDITED ===================== ===========
我的dll文件的位置是"c:\ UsbDll.dll"
当我在同一个位置放置另一个dll文件时,JNA找到了它,所以我认为问题仅在于我的"UsbDll.dll"文件.
当我尝试使用以下命令加载dll文件(UsbDll.dll和另一个dll)时
System.load("c:\\UsbDll.dll");
System.load("c:\\another.dll");
Run Code Online (Sandbox Code Playgroud)
它成功加载了"another.dll",但对于"UsbDll.dll",它会引发以下异常:
java.lang.UnsatisfiedLinkError: C:\UsbDll.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1699)
at java.lang.Runtime.load0(Runtime.java:770)
at java.lang.System.load(System.java:1003)
at com.MainClass.<clinit>(MainClass.java:16)
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)
Q1.看起来它没有找到一些依赖库.但由于我对这些dll完全不熟悉,有什么我缺少的,或者我需要请求供应商为我提供依赖库.
要么
这取决于我可以从互联网上下载的一些标准库吗?如果是,那么如何找到它所依赖的库名?
============================编辑#2 =================== =============
我在我的UsbDll.dll文件上运行Dependency Walker以找到缺少的依赖项,并发现以下缺少的依赖项.
WER.DLL (由我的c:\ windows\system32中的库WINNM.DLL引用)
IESHIMS.DLL (由我的c:\ windows\system32中的库WINNM.DLL引用)
WDAPI920.DLL (由我的UsbDll.dll直接引用)
Q1.由于在我的system32文件夹中找到了WINNM.DLL,它似乎是标准的dll.如果这个标准的DLL指的是2个缺少的dll(WER.DLL和IESHIMS.DLL),那么我怀疑其他应用程序是如何使用这个WINNM.DLL文件的?
Q2.我用Google搜索了WDAPI920.dll(直接引用了我的UsbDll.dll),许多搜索结果都出现了相同的dll名称.所以它看起来也像是一些标准库.那么如何解决这些依赖关系呢?从哪里下载?下载后,我可以将它们放在我的主dll(UsbDll.dll)所在的同一目录中,或者我需要做一些额外的操作才能成功加载我的dll(UsbDll.dll)吗?
| 归档时间: |
|
| 查看次数: |
10212 次 |
| 最近记录: |