在exlipse里需要利用jna调用一个dll文件,使用Native.loadLibrary("TKSKEncLib",**.class)加载库。 如果是第一个参数写绝对路径的话,可以运行。但是我把第一个参数改为相对路径就会总是提示 Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'TKSKEncLib.dll': ???????¨
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:155)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:216)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:191)
at com.sun.jna.Library$Handler.<init>(Library.java:131)
at com.sun.jna.Native.loadLibrary(Native.java:279)
at com.sun.jna.Native.loadLibrary(Native.java:265)
at ceshi.JiamiJnaTest$TKSKENCLIB.<clinit>(JiamiJnaTest.java:11)
at ceshi.JiamiJnaTest.main(JiamiJnaTest.java:29)工作目录是E:\workspace
将 dll文件在E:\workspace 、E:\workspace\test 、E:\workspace\test\ceshi (class位置) 还有环境变量path 和 C:\WINDOWS 、C:\WINDOWS\system32 里都放了一遍 还是不行.
哪位大侠知道到底是什么原因? dll文件具体应该放到什么地方?
谢谢~
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:155)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:216)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:191)
at com.sun.jna.Library$Handler.<init>(Library.java:131)
at com.sun.jna.Native.loadLibrary(Native.java:279)
at com.sun.jna.Native.loadLibrary(Native.java:265)
at ceshi.JiamiJnaTest$TKSKENCLIB.<clinit>(JiamiJnaTest.java:11)
at ceshi.JiamiJnaTest.main(JiamiJnaTest.java:29)工作目录是E:\workspace
将 dll文件在E:\workspace 、E:\workspace\test 、E:\workspace\test\ceshi (class位置) 还有环境变量path 和 C:\WINDOWS 、C:\WINDOWS\system32 里都放了一遍 还是不行.
哪位大侠知道到底是什么原因? dll文件具体应该放到什么地方?
谢谢~
已经放过 C:\WINDOWS了,不行
当时用绝对路径的时候名字是TKSKEncLib.dll ,改相对路径的话不能加后缀名,当时没删掉...
怪不得放哪都不管用 晕啊
例:
public interface TKSKENCLIB extends Library {
TKSKENCLIB skenc = (TKSKENCLIB) Native.loadLibrary ("TKSKEncLib",TKSKENCLIB.class);
public int SKEncFile(String a, String b, String c, int d);
}
资料:
Native.loadLibrary() 函数有 2 个参数:
1 , dll 或者 .so 文件的名字,但不带后缀名。这符合 JNI 的规范,因为带了后缀名就不可以跨操作系统平台了。
搜索 dll 的路径是:
1 )项目的根路径;例:E:\workspace\test
2 )操作系统的全局路径;C:\WINDOWS 、C:\WINDOWS\system32
3 ) path 指定的路径。
2 ,第二个参数是本接口的 Class 类型。
JNA 通过这个 Class 类型,根据指定的 dll/.so 文件,动态创建接口的实例。
都纠结了好多天了,还是不行啊,各位大牛帮帮忙吧