JAVA调用C++的DLL库

爬过的坑 专栏收录该内容
2 篇文章 0 订阅

今天公司由于需要调用大华的摄像头,但是大华提供的接口为C++的动态连接库DLL,在网上找了相关资料,发现有3种方法调用

1.通过java自带的jni,找了写资料学习了下,发现这条路太复杂,而且每次要改调用接口,都需要以大堆复杂的操作步骤,

  看完后都觉得头大,不太适合。

2.第二种是使用JNative来调用,找了写资料,jar包也下到了,但是在调的过程中报错:“JNative library not loaded, sorry !”

  安装网上找的资料说把JNativeCpp.dll复杂到C:\Windows\System32目录下,问题依然存在,在复制到C:\Windows\SysWOW64

目录下““JNative library not loaded, sorry !”小强还是存在,然而找到的1.4的版本,同样无法解决,经过多翻资料查找,分析可能是由于

JDK版本问题所导致,但是考虑到之前的项目都是用64位的JDK,换JDK不太现实,考虑用C#来调用DLL接口,然后发布为webServic

JAVA通过调用webServic来调用dll,但是公司里对c#熟悉的人不多,后期维护可能会有问题,基本就成我的事了。。这个是最后都不

行的保守方案吧。

3.jna第三种方案是貌似可以,而且也支持64位的JDK。看了一下貌似可以,最后经过调试完美调用成功

下面将整个过程记录下来

首先:下载jna-4.0.0.jar

然后将下载jna.jar报导入项目

第三部创建接口文件,该文件为interface接口。是libary的扩展,之后加载DLL文件,该DLL文件需要复制到项目的目录下

然后定义需要调用方法,不需要实现

最后通过测试调用该方法,调用成功

代码如下

接口文件代码

package com.xf.javacallcc;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * @author mzn45
 * @date 2021/4/1
 */
public interface JavaJna extends Library {
    JavaJna instance = (JavaJna) Native.loadLibrary("DPSDK", JavaJna.class);

    public int DPSDK_Init();
}

测试代码

@Test
void testJna(){

    int a=JavaJna.instance.DPSDK_Init();
    System.out.println(a);
}

 

 

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

mzn458

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值