问题描述

java通过JNA调用C/C++ dll时,报Invalid memory access

问题原因

经过分析原因是数据类型不匹配问题

int &a 和 a 的区别

C语言中的a是一个变量,储存着值。&a是常量,是变量a的内存地址。一般的&a是用来赋值给指针的(int *p=&a ;),或者是作为函数的参数传递(地址传递)

在java中对应&a 指针地址的引用变量为 com.sun.jna.ptr.IntByReference 或者 byte[]

代码实现

将dll 放到resources 下面

引入的 JNA 的 Maven配置

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

JAVA代码实现 

package com.example.demo;import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** jvm 64位程序执行64位dll* jvm 32位程序执行32位dll*/
@RestController
@RequestMapping("/test")
public class AddController {public interface AddLib extends Library {AddLib instance = Native.load("lib64/test", AddLib.class);//int Add1(byte[] a,byte[] b); // 对应C 语言程序 int Add1(int &a,int &b)//int Add1(Object a, Object b);// 对应C 语言程序 int Add1(int &a,int &b)int Add1(IntByReference a, IntByReference b);// 对应C 语言程序 int Add1(int &a,int &b)int Add2(int a, int b); // 对应C 语言程序 int Add1(int a,int b)}@GetMapping("/add1")public static int Add1() {Integer a = new Integer(1258);Integer b = new Integer(2);return AddLib.instance.Add1(new IntByReference(a), new IntByReference(b));
//        return AddLib.instance.Add1(toLH(a),toLH(b));}@GetMapping("/add2")public int Add2() {return AddLib.instance.Add2(2, 3);}@GetMapping()public String st() {return "hello test add";}public static void main(String[] args) {int d = AddLib.instance.Add2(112, 22);System.out.println("=============" + d);d = Add1();System.out.println(d);}public static byte[] toLH(int n) {byte[] b = new byte[4];b[0] = (byte) (n & 0xff);b[1] = (byte) (n >> 8 & 0xff);b[2] = (byte) (n >> 16 & 0xff);b[3] = (byte) (n >> 24 & 0xff);return b;}public static byte[] toHH(int n) {byte[] b = new byte[4];b[3] = (byte) (n & 0xff);b[2] = (byte) (n >> 8 & 0xff);b[1] = (byte) (n >> 16 & 0xff);b[0] = (byte) (n >> 24 & 0xff);return b;}}

Java用JNA调用dll : Invalid memory access相关推荐

  1. 【开发者笔记】java 利用jna调用c#的dll

    一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...

  2. Java利用JNA调用C#的dll

    https://www.cnblogs.com/wyongbo/p/jnaTest.html 本文参考以上链接,结合自己实际遇到的问题,做过一些修改(红色字体标注),主要是为了给自己做个笔记. 一.需 ...

  3. java memory access_Jna报Invalid memory access错误是怎么回事?

    1.各位大神,在用jna时,总是报错,如下 Exception in thread "main" java.lang.Error: Invalid memory access at ...

  4. 使用Jna调用dll函数库(java使用jna对接硬件接口)

    记录一次项目经历,新公司开发过程中遇到了硬件对接的需求,没有接触过这方面的我一想到这些就很头大,花了几天时间来专门研究一下这个.一般硬件购买后厂家都会附赠一些开发文档,有各种语言的demo,里面其实重 ...

  5. 使用Java中的jna调用dll

    简介: 在我们日常编码中在与硬件通信或者与其他的c++平台通信的时候经常用java调用dll文件,下面我们介绍俩种使用jna调用dll的方式. 如果是自己部门写的dll文件,一般会有头文件,头文件中会 ...

  6. JNA调用dll - java集成一美IP对讲SDK(dll文件)

    项目需要集成一美IP对讲机,一美SDK是dll文件,其他的dll文件集成做法也类似.记录一下 准备 将一美SDK文件的DataTran.dll文件放到系统C:\Windows\System32文件夹里 ...

  7. JNA调用DLL函数遇到的几个问题

    最近一个JSP项目需要用到分词模块,而分词模块实用C++写成的DLL库.于是上网搜各种方法,最后选择了JNA作为JSP调用DLL的工具. JNA(Java Native Access )提供一组Jav ...

  8. 软件开发Linux环境下,java通过JNA调用so报错,求大神解答,感激不尽。

    软件开发Linux环境下,java通过JNA调用so报错,求大神解答,感激不尽. 图片说明 最佳答案: 专家已采纳 先用c等调用一下so,看函数能否正确调用 文章来源:https://ask.csdn ...

  9. java中通过JNA调用dll

    ---恢复内容开始--- 1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进 ...

最新文章

  1. 几个阿里, 美团,腾讯大佬的公众号!超级变态!
  2. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
  3. 简练软考知识点整理-控制干系人参与
  4. 使用Storm实现WordCount
  5. HTTP 代理如何正确处理 Cookie
  6. tailf、tail -f、tail -F 指令
  7. java如何实现开机启动,怎样实现开机启动holer
  8. matlab excel 进程,Matlab使用xlsread, xlswrite函数导致excel进程无法终止的问题
  9. 微擎 php开发手册,目录结构
  10. codeforces776D
  11. opensips服务端搭建
  12. 小世界网络和复杂网络+python代码实现
  13. 10个超高清图片素材网站,不需要翻墙就可以直接访问
  14. mt7620 外置pa_openwrt在mt7620a芯片上对外置PA的支持
  15. awb数据怎么计算_自动白平衡(AWB)算法
  16. 正则表达式(regex,RE)
  17. 数字证书有什么作用?
  18. 【Word】论文的章标题以汉字编号,图、表以数字编号的实现
  19. java bluecove教程_Eclipse + Java + BlueCove + WIN/MAC 蓝牙开发
  20. MJ“点击或上拉加载更多”问题

热门文章

  1. 有限差分法C语言编程,有限差分法
  2. Excel - 学习 - 笔记4: Excel 函数 - if 函数
  3. Android八大模块进阶学习笔记(性能优化、百大框架、高级UI、Flutter、Kotlin...)
  4. 西瓜视频答题页面自动搜索题目
  5. 搭建文件服务器 MinIO
  6. 搜狗搜索网站验证说明
  7. String 两种实例化对象的区别
  8. 营养素的基础知识2(非技术文)
  9. android 卡片播放,显示“正在播放”卡片
  10. 大数据技术与原理之流计算基本知识点梳理(一)