JAVA JNA 调用 C++接口

背景介绍

项目中用到第三方设备发送短信,设备方提供的是C++语言API,提供windows下32位的xxx.dll的sdk,经过了解,JNA可以实现像调用本地方法一样的调用其它语言的方法,选择使用了JNA。

springboot项目接入JNA的流程

项目使用的springboot版本是1.5.9.RELEASE
1.pom文件引入JNA jar包

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

2.自定义接口继承StdCallLibrary,将sdk中的方法暴露出来

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.StdCallLibrary;
public interface xxx extends StdCallLibrary {
	//初始化加载
    XxxLibrary INSTANCE = Native.load("native/libzz_net.dll", SmsCatLibrary.class);
    //暴露的方法
    int zz_set_cfgfile(String path);
}

3.定义好,可以像实用本地方法一样去调用sdk api中的方法

使用中遇到的问题

1.c++类型和java类型对应关系,可参考其他相关文档,建议char*类型使用byte[]数组替换
2.c++字符串以\0结束,如果出现在字符串乱码情况,可以考虑传值是拼上\0后再转成byte[]数组
3.出现.dll读取不到的情况
在idea环境中没有问题,打成jar包后出现问题,可以考虑新增一级目录win32-x86/native,我当时百度了这个问题,可能和jna的实现有关系
4.配置文件读取不到的情况,可以考虑写成绝对路径1


  1. C:\Program Files\xxx.ini ↩︎

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值