在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文件具体应该放到什么地方?
谢谢~ 

解决方案 »

  1.   

    将dll copy 到 C:\WINDOWS 下面。
      

  2.   


    已经放过 C:\WINDOWS了,不行
      

  3.   

    呃 解决了 ...
    当时用绝对路径的时候名字是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 文件,动态创建接口的实例。
      

  4.   

    我连绝对路径都还是提示:Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Documents and Settings\Administrator\Workspaces\MyEclipse 8.5\test\WsnDevice': ???????¨
    都纠结了好多天了,还是不行啊,各位大牛帮帮忙吧