前言
dll是什么?
动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
一、为什么要用java调用dll?
示例:用c++编写的一些高级方法,编译成dll文件,不想在编写java方法,想直接调用,这个时候就可以用jna来调用
二、使用步骤
1.导入pom
代码如下:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.9.0</version>
</dependency>
2.编写StdCallLibrary接口
代码如下(这里用到的是匿名接口,因为我的主类是工具类):
//继承StdCallLibrary 接口
interface JnaDll extends StdCallLibrary {
//加载一个实例,这里新版本用的是load,如果是旧版本可以使用loadLibrary方法
//DllUtils.getPath()+"\\format_image"是一个文件路径:注意不要dll后缀
//D:\softy\faceDLL\format_image.dll
JnaDll INSTANCE = Native.load(DllUtils.getPath()+"\\format_image",JnaDll.class);
//dll里面的方法(三个)
String c_GetHeadByFilePath(String chars);
String c_GetHeadByFileData(byte[] filedata, int size);
String init(String random);
}
3.直接使用
//这个是我工具类的方法,因为只在工具内使用因此设置为private
private static void init(){
//用jna实例调用里面的init方法
String str = JnaDll.INSTANCE.init(null);
}
4.路径问题
private static String path;
@Value("${face.dll.path}")
public void setPath(String path) {
DllUtils.path=path;
}
public static String getPath(){
return path;
}
上文我们可以看到使用了load加载 DllUtils.getPath()+"\format_image", 这个路径,这个路径需要是绝对路径,要不然项目运行测试可以,但是打包后就不行,注意。