使用Java的JNative调用dll动态链接库

1,首先下载JNative的库,其中包含JNative.jar, JNativeCpp.dll, libJNativeCpp.so这三个包。

      JNative.jar是需要导入到Java工程的lib下。 通过Build Path即可导入。 建议将JNative.jar放在jdk的jre\lib\ext文件里。

      JNativeCpp.dll是必须放入到jdk的jre\bin文件里,否则就会报JNative找不到的错误。

       libJNativeCpp.so是Linux操作系统的,由于没有做过实验,所以暂时不予说明。

2,由于  JNativeCpp.dll是32为windows程序,所以需要下载jdk 32位的版本才可以。(本人就是在这个上面浪费了一天的时间在调试错误。)

3,将需要调用的dll动态链接库放置到system32文件里,否则就会出现找不到dll文件的错误。

4,在调用dll后需要通过JNative的setParameter()方法来给dll库中所需要调用的函数传参,由于方法的限制,在给dll函数中传char[]是不成功的,因为setParameter()是不支持char[]类型的。而且在传byte[]等这些参数的时候,需要将setParameter()第二个参数写为Type.VOID。

5,下面是代码部分

//导入JNative库

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;

//调用dll库
JNative getUrl=null;

byte[] f1=null;    //dll方法需要传的参数
byte[] f2=null;

f1=f3.getBytes();   //f3 f4 为String
f2=f4.getBytes();

getUrl = new JNative("ARTH_DLL", "Match2Fp");    //调用dll库,第一个参数为dll名字  第二个参数为dll库中函数的名字

try {
getUrl.setRetVal(Type.INT);                            //定义函数返回值类型
} catch (IllegalAccessException e) {
e.printStackTrace();

try {
getUrl.setParameter(0, Type.VOID, f1);        //传递参数,第一个参数为所调用的函数中的第几个参数。   第二个参数为向多调用的函数中的传参类型    第三个参数为传递的值
getUrl.setParameter(1, Type.VOID, f2);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
getUrl.invoke();                                                 //执行所调用的函数
try {
i=getUrl.getRetValAsInt();                                    //获取所调用的函数的返回值
System.out.print(String.valueOf(i));
} catch (IllegalAccessException e) {
e.printStackTrace();
}




你可能感兴趣的:(java调用dll)