利用JNI调用c++函数

在公司项目中遇到这么一个难题

客户有一个基板,这个基板通过数据线可以连接到电脑上,装上驱动就可以调用基板提供的函数.

但是程序是java开发的,所以就需要通过java调用基板函数,但是基板函数允许C++调用不支持java,所以就用到java调用C++

基板函数按照返回值大致分为两种

1.调用后直接返回数字,一般属于命令型函数,比如打开电源,返回0表示打开成功

2.调用后返回数组,比如需要获取采集的数据

第一种类型比较容易,用JNA、JNI都可以实现。因为只返回一个int,java比较容易接收。

第二种返回数组,因为C++有指针,当时机器函数返回的是一个内存地址,这个时候如果直接调用java是无法访问内存地址的。

因此需要转换。

当初也尝试过将返回的数组转为用逗号分割的字符串,但是长度超过300就会类似内存溢出的错误,所以最后放弃这种方式。

 

重点说一下第二种情况的解决方法

JAVA的代码

public class OASSInterface {
    //方法
    public native int[] SDFArray(String jsonStr,int[] iarr);
    public native int getButtonStatus();
    //加载dll
    static{
		File directory = new File(OASSInterface.class.getResource("/").getPath());
		System.load(directory+ "\\Interface.dll");
	}

}


//直接调用即可
int[] resultArr = oASSInterface.SDFArray(jsonStr, arr,)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值