2013-04-24 1610 views
2

我正在放置一个jar,它可以让我调用只对本机可用的命令(jar使用本机而不是实际的程序)。现在我遇到了一个问题,每当我加载DLL。这是错误:JNA java.lang.UnsatisfiedLinkError和找不到指定的模块

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'myDLL.dll': The specified module could not be found. 

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194) 
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:283) 
at com.sun.jna.Library$Handler.<init>(Library.java:142) 
at com.sun.jna.Native.loadLibrary(Native.java:368) 
at com.sun.jna.Native.loadLibrary(Native.java:353) 
at src.NativeBridgeJar.<clinit>(NativeBridgeJar.java:6) 
at src.Main.main(Main.java:6) 

我不明白为什么这个错误的原因是什么。我确保我将原生库路径设置为使用本地文件夹。有人有想法吗?先谢谢了!

回答

2

你应该显示JVM你的dll的位置。这可以通过-Djava.library.path=pathToDll虚拟机参数

+2

那没根本不工作。 – user2306911 2013-04-24 07:21:21

3

A)当您拨打Native.loadLibrary()时,可以提供简写名称(“myDll”),文件名(“myDll.dll”)或共享库的绝对路径“C:/users/me/myDll.dll”)。

B)如果你不提供对库中的绝对路径,你可以告诉它通过指定jna.library.path,或将其公布于java.library.path加载DLL(有)在NativeLibrary javadoc描述的其他选项。

1

我有同样的问题,直到我把我的.dll文件放到C:\ Windows \ System32中,因为它是一个C++ DLL,并且依赖于该文件夹中的Kernel32.dll和MSVCR100.dll。这似乎工作。

0

除了使用-Djava.library.path=pathToDllSystem.setProperty("jna.library.path","pathToDll");确保特定的Visual C++ XXXX再发行组件包安装在您的Windows设置DLL的路径(BCS窗机库应已建成具有特定的VisualStudio XXXX)

相关问题