Java:util_USBUIRT.dll:找不到依赖库

我想在我的项目中使用这个JAR文件( http://sourceforge.net/projects/uirt-j/ )。 在Eclipse中,我使用了选项Project> Java Build Path> Add External JARs来导入它。 我可以在Ecplise中看到所有类的JAR文件。 这个JAR包含两个dll文件。 为了加载dll,我输入了System32目录,但是当执行我的代码时,我得到了以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Windows\System32\util_USBUIRT.dll: Can't find dependent libraries at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at util.USBUIRT.(USBUIRT.java:269) at Uirt.main(Uirt.java:6) 

使用Dependence Walker我可以看到所有DLL都在System32文件夹中。 我的代码:

 import util.USBUIRT; public class Uirt { public static void main(String[] args) { String code = "0000"; try { USBUIRT.transmitIR(code, 2, 3, 2); } catch (Exception e) { e.printStackTrace(); } } } 

如果单独执行JAR,那就可以了。 谢谢。 (Windows 7×64)

上面提到的jar中的dll是32位。 环境是Win7 x64。 我假设JVM是32位,否则会出现另一个错误,即: Can't load IA 32-bit .dll on a AMD 64-bit platform或类似Can't load IA 32-bit .dll on a AMD 64-bit platform

尝试将dll复制到C:\Windows\SysWOW64而不是C:\Windows\System32 。 32位dll应该进入C:\Windows\SysWOW64 。 它对我util.USBUIRT$NotInitializedException ,虽然我得到了util.USBUIRT$NotInitializedException ,这可能表明库已正确加载。

文件系统重定向器文章可能会对SysWOW64System32有所了解。

编辑:调整java.library.path

您也可以使用注释中提到的解决方案,例如,将dll复制到C:\tmp并使用参数运行:

 -Djava.library.path="C:\tmp;${env_var:PATH}" 

但由于两个dll之间存在依赖关系,因此C:\tmp必须位于PATH 。 否则仍然存在UnsatisfiedLinkError 。 手动加载uuirtdrv.dll应该有帮助,即:

 import util.USBUIRT; public class Uirt { static { System.loadLibrary("uuirtdrv"); } public static void main(String[] args) { String code = "0000"; try { USBUIRT.transmitIR(code, 2, 3, 2); } catch (Exception e) { e.printStackTrace(); } } }