JAVA利用JNative调用DLL文件
一、需要的jar包
JNative.jar
二、需要的dll文件
需要调用的文件:myadd.dll
此dll依赖的文件:api-ms-win-crt-runtime-l1-1-0.dll、vcruntime140.dll
需要知道的".h"文件中的方法,入下图:
三、java环境
根据dll文件配置jdk坏境,32位的dll需要配置32位jdk环境。我的是32位的。所需文件见底部。
四、代码案列一
public static void main(String[] args) {
/**
* 加载dll文件及依赖库的方法一
* String path = "E:\\dll\\myadd.dll";
* String path = "E:\\dll\\api-ms-win-crt-runtime-l1-1-0.dll";
* String path = "E:\\dll\\vcruntime140.dll";
* System.load(path);
* */
/**加载dll文件的方法二*/
System.loadLibrary("myadd");//此方法需要将myadd.dll以及依赖的dll文件放入jdk的bin目录下
try {
//param1:dll文件名 param2:方法名(上述.h文件中的方法名)
JNative jNative = new JNative("myadd.dll", "add");
//设置返回值类型
jNative.setRetVal(Type.INT);
//设置参数
jNative.setParameter(0, Type.INT, "5");
jNative.setParameter(1, Type.INT, "2");
jNative.invoke();
//获取返回值
System.out.println(jNative.getRetVal());
} catch (Exception e) {
e.printStackTrace();
}
}
五、代码案列二
public interface CLibrary2 extends Library {
//需要将myadd.dll文件放入jdk的bin目录下
CLibrary2 myadd_Operate = (CLibrary2) Native.loadLibrary("myadd", CLibrary2.class);
int add(int a, int b);
double add_double(double a, double b);
}
public static void main(String[] args) {
try {
int c = CLibrary2.myadd_Operate.add(4, 5);
System.out.println(c);
double v = CLibrary2.myadd_Operate.add_double(10.5, 6.3);
System.out.println(v);
}
catch (Exception e)
{
e.printStackTrace();
}
}
备注 (dll文件及32位jdk)
链接:https://pan.baidu.com/s/1GMW5ziNEveLo7tb0fA0h4w
提取码:te96
我的码云地址: https://gitee.com/zhanghb_private