栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合JNA调用DLL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合JNA调用DLL

文章目录
  • 前言
  • 一、为什么要用java调用dll?
  • 二、使用步骤
    • 1.导入pom
    • 2.编写StdCallLibrary接口
    • 3.直接使用
    • 4.路径问题
  • 总结


前言

dll是什么?
动态链接库英文为DLL,是Dynamic link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。


一、为什么要用java调用dll?

示例:用c++编写的一些高级方法,编译成dll文件,不想在编写java方法,想直接调用,这个时候就可以用jna来调用

二、使用步骤 1.导入pom

代码如下:


	net.java.dev.jna
	jna
	5.9.0

2.编写StdCallLibrary接口

代码如下(这里用到的是匿名接口,因为我的主类是工具类):

//继承StdCallLibrary 接口
interface JnaDll extends StdCallLibrary {
//加载一个实例,这里新版本用的是load,如果是旧版本可以使用loadLibrary方法
//DllUtils.getPath()+"\format_image"是一个文件路径:注意不要dll后缀
//D:softyfaceDLLformat_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", 这个路径,这个路径需要是绝对路径,要不然项目运行测试可以,但是打包后就不行,注意。

总结 使用jna调用dll还是比较简单的,但是对于目录问题还是要注意
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号