厂家给的dll函数原型:
    ATM_DLL_API  char *output_data(char input[],char output[80]); 
    ATM_DLL_API  char *source_data(char input[],char source_output[53]); 
    ATM_DLL_API  char *key_data(char input[],char key_output[]);那么我的java代码中使用一个接口去模拟函数原型:
   public interface ATM_DLL_1 extends Library {  
     public String output_data(char input[],char[] output); 
     public String source_data(char input[],char[] source_output); 
     public String key_data(String char_input,String key_output); 
    }然后在main函数中进行加载调用:
public static void main(String[] args) {  
                 //3.加载DLL文件,执行dll方法    
     ATM_DLL_1 atm_dll = (ATM_DLL_1) Native.loadLibrary("d:\\DLL\\ATM_DLL_1",  
     ATM_DLL_1.class); 
     char[] chars = new char[20];
     String tt = "";
        if (atm_dll != null) {  
            System.out.println("DLL加载成功!");  
            String success = atm_dll.key_data("2015080432472015080410234010000201508041432070999978", tt);  
            System.out.println("调用结果!" + success);  
            System.out.println("调用结果!" + tt);  
        }  
    }
报错:
DLL加载成功!
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'key_data': ÕҲ»µ½ָ
at com.sun.jna.Function.<init>(Function.java:179)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)
at com.sun.jna.Library$Handler.invoke(Library.java:203)
at $Proxy0.key_data(Unknown Source)
at Main.main(Main.java:25)问题:
加载已经成功,目前的错误应该我在java中的函数原型中的数据类型和c的dll中的数据类型不对应引起的,目前就不知道该如何定义接口中的3个方法???

解决方案 »

  1.   

    凡是字符串降String就用char[] 代替一下可以不。。
      

  2.   

    这几天也在看类似的问题,猜测java模型
            public String output_data(char input[],char[] output);
    其中的数组参数要用charByReference类型。反正也不懂,算是帮忙顶了
      

  3.   

    c的char对应的Java类型是byte。Java的char是2字节的,对应到c上是平台依赖类型。
    改成public String output_data(byte[] input,byte[] output)试试
      

  4.   

    必须写(extern "c"的声明,不然到时候使用Java的jna是不可能匹配到这个方法的,很明显会抛出异常java.lang.UnsatisfiedLinkError: Error looking up function 'add': ÕҲ»µ½ָ¶¨µ),这个文件相当于我们的java中的interface,你可以这样理解extern "C" _declspec(dllexport)   http://blog.csdn.net/shadowsick/article/details/9101477