我想用java调用c的dll文件,dll文件中有一个是连接到硬件上的接口函数。
但是一直出错,我刚接触JNA对它不是很熟悉,希望知道的大虾帮帮忙。zkemkeeper.dll
里面有函数:VARIANT_BOOL Connect_Com([in] LONG ComPort, [in] LONG MachineNumber, [in]
LONG BaudRate)
VARIANT_BOOL Connect_Net([in] BSTR IPAdd, [in] LONG Port)
public class Zkem {
    public interface TestZkem extends Library{
        TestZkem INSTANCE=(TestZkem)Native.loadLibrary("zkemkeeper", TestZkem.class);
    } 
    public static void main(String[] args){
       Zkem jfczkem = new Zkem(1);   
        jfczkem.connectCom(1, 1, 115200);
        System.out.println("Connect:"+jfczkem.connectNet("192.168.0.201", 4370));
     }      public native boolean connectCom(int comPort, int machineNumber, int baudRate);
 
      public native boolean connectNet (String ipAddress, int port);
       运行报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: com.metaarchit.java.Zkem.connectCom(III)Z
at com.metaarchit.java.Zkem.connectCom(Native Method)
at com.metaarchit.java.Zkem.main(Zkem.java:12)

解决方案 »

  1.   

    你生成了一个.h的文件么? 放在src目录下...用Zkem.class生成.
      

  2.   


    可以用jna的啊,听说它比jni好用一些,
      

  3.   

    在一个.java文件中导入库,相当于c里的头文件
    public interface zkemkeeper  extends StdCallLibrary {    zkemkeeper  INSTANCE = (zkemkeeper) Native.loadLibrary("zkemkeeper",
                zkemkeeper.class);boolean Connect_Com(NativeLong ComPort, NativeLong MachineNumber, NativeLong  BaudRate);boolean Connect_NetNativeLong  IPAdd, NativeLong Port);
    }另一个java文件中调用:
        static zkemkeeper keep = zkemkeeper.INSTANCE;在此java文件中调用:keep.Connect_Com(...)
    确定dll在此项目的目录下或者在system目录下