关于大家用习惯了的jna调用dll

2018-7-31 02点21分 记录笔记,以免以后再碰到相同情况忘记。
这里写图片描述
当java 使用 jna 调用 C++ dll的时候 记得在C++接口中 将接口对方开放 并且extern “C” 这句话的作用是保证 jna调用dll的时候 能找得到相应方法。

测试C++的dll动态库是否是可以调用的 可以使用VS自带的dumpbin.exe 工具 命令:dumpbin -exports “绝对路径/XXX.DLL”。

这里写图片描述
这种情况表示 dll接口没有对外开放

这里写图片描述

这种表示 没有 extern “C”

这里写图片描述

这种表示可以调用

再然后需要注意 java 与 C++ 的基本类型是不一样的。int 这种大家都一样的基本类型 就不用注意,但是string这种东西,C++中 string 注意s是小写 和 java的 String 是不能互通的,java的String 约等于 C++中的 多个char,所以java的String 传递到 c++中 c++可以使用 char* 类型来接收。

java的boolean 和 C++的 boolean不是一个概念,C++的是和非 就是1和0,java是true和false ,这个也是一个需要注意的点、。

——————————————————————–疯狂的分割线———————————————————————

接下来说下java方面的调用。
首先是maven配置jna地址,版本号推荐使用最新版本,我这个是2018年7月最新的版本

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.5.2</version>
</dependency>

然后就是调用了,这里需要注意一点,dll放的位置,我用的springboot2.0.3 dll只需要跟我的配置文件application.properties放在同一个路径下就可以了
这里写图片描述

public interface Dll extends Library{
Dll instance = (Dll) Native.loadLibrary(“FER_SHARED_LIB.dll”, Dll.class);
int init(String name);
}

public void contextLoads() {
int init = Dll.instance.init(“name”);
System.out.println(“init :”+init );
}

就这样 最简单的一个dll调用就完成了,包括了入参和返回值。跟网上大部分不一样的地方就在于有入参和返回值,网上很多最基本的方法里 入参是void 返回也是 void 这就等于在参数互相转换这块漏了一个大坑。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值