JNA在没有源代码的情况下调用DLL

时间:2012-08-13 21:00:22

标签: java dll java-native-interface jna

我必须调用一个dll方法而且我没有来自dll的源代码,我正在阅读有关JNI的内容并且理解您应该有源代码在代码(.h)中输入JNI库。

我的第二次拍摄是JNA,但我得到了同样的错误,尽管你不需要改变DLL中的任何内容。

我创建了两个要测试的类:

接口

package icom;

import com.sun.jna.Library;

public interface IConectorT extends Library {
    int StartConector(byte[] conectorStatus, String icomPath);
}

DLL方法调用:

package icom;

import com.sun.jna.Native;

public class ConectorTJna {

    public static void main(String args[]) {

        IConectorT lib = (IConectorT) Native.loadLibrary("ConectorT", IConectorT.class);
        int teste = lib.StartConector(null, "C:\\ICOM");
        System.out.println("RESULT: " + teste);
    }
}

当我调用lib.StartConector方法时,我得到了这个:

  

线程“main”中的异常java.lang.UnsatisfiedLinkError:错误   查找函数'StartConector':指定的过程不能   被发现。在com.sun.jna.Function。(Function.java:179)at   com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:350)at   com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:330)at   com.sun.jna.Library $ Handler.invoke(Library.java:203)at   $ Proxy0.StartConector(未知来源)at   icom.ConectorTJna.main(ConectorTJna.java:10)

1 个答案:

答案 0 :(得分:1)

您是否指定了库的路径,例如使用系统属性?

以下是“JNA入门”指南中的详细信息:

  

使您的目标库可用于Java程序。那里有两个   方法:

     
      
  1. 首选方法是将 jna.library.path 系统属性设置为   目标库的路径。这个属性类似于    java.library.path ,但仅适用于JNA加载的库。

  2.   
  3. 在启动之前更改相应的库访问环境变量   VM。这是Windows上的 PATH ,Linux上的 LD_LIBRARY_PATH ,以及   OSX上的 DYLD_LIBRARY_PATH

  4.   

取自:https://github.com/twall/jna/blob/master/www/GettingStarted.md