java想要调取外部dll文件,而dll文件不是为java准备的,则我们需要自己生成可以调用外部dll文件的可供java调取的dll文件。
首先我们需要生成java文件,声明本地方法。如下:
package com;
public class JniDemo {
public static native int init(String model_path,String key);
public static native int deinit();
}
然后将其生成.h文件,我所在的类文件在com包下,所以cmd进入com包同级目录,并执行javah命令
F:\>cd F:\openCV\openCv\src\main\java
F:\openCV\openCv\src\main\java>javah -encoding UTF-8 -classpath . -jni com.JniDemo
F:\openCV\openCv\src\main\java>
打开VS2017
创建项目,我们要用它创建dll文件。
选取windows桌面的dll动态库 。创建后目录如下:
右键项目,单击属性。拿我自己的为例,需要用到opencv,所以需要配置相关文件。如下
VC++目录 包含目录:
C:\opencv\build\include
C:\opencv\build\include\opencv
C:\opencv\build\include\opencv2
VC++目录 库目录:
C:\opencv\build\x64\vc14\lib
链接器 输入 附加依赖项【对应opencv版本】:
opencv_world345.lib
opencv_world345d.lib
配置完,就可以在dll5.cpp文件编写接口实现类,头文件引入之前生成的.h文件,cpp实现需要引入.h即可编写实现类。
不要忘记将jni.h与jni_md.h同样引入头文件内。java生成的.h文件需要将引入的<jni.h>变成"jni.h"
这样就可以右键生成解决方案了。放在项目指向的Library下,java文件加入如下代码:
static {
try {
System.loadLibrary("dll5");
} catch (Exception e) {
// TODO: handle exception
}
}
即可使用java上述的方法。如果提示找不到依赖项,就将你所依赖的dll文件放入C:\Windows\System32下即可。