SpringBoot整合JNA调用DLL


前言

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", 这个路径,这个路径需要是绝对路径,要不然项目运行测试可以,但是打包后就不行,注意。

总结

使用jna调用dll还是比较简单的,但是对于目录问题还是要注意
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值