厂家给的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个方法???
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个方法???
public String output_data(char input[],char[] output);
其中的数组参数要用charByReference类型。反正也不懂,算是帮忙顶了
改成public String output_data(byte[] input,byte[] output)试试