栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java通过JNA(Java Native access)调用C++语言的接口

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java通过JNA(Java Native access)调用C++语言的接口

  • 1. JNA(Java Native access)
    • github的项目地址:https://github.com/java-native-access/jna
    • B站学习地址:Java使用JNA调用C/C++动态链接库dll_哔哩哔哩_bilibili
  • 2. JNA的基础介绍
    • JAVA语言可以通过JNA机制,去访问C++定义的函数,进而实现了JAVA和C++的交互
    • JNA机制:也可以称作动态链接库机制
    • DLL:Dynamic Link Library:动态链接库
    • JNA是基于JNI发展出来的一个技术,实际上是一个类库。
  • 3. 使用步骤
    • 1、下载Jar包,导入Java项目
      • 下载地址:https://github.com/java-native-access/jna#jna
    • 2、创建一个C++项目:具有导出项的DLL动态链接库项目
      • (1) 按照示例,定义导入导出函数
        • 示例:
          • TESTDLL_API add(int a, int b)
            {
                int value = a + b;
                return value;
            }

      • (2) 编译运行C++项目。生成TESTDLL.dll 文件
    • 3、将上一步生成的TESTDLL.dll 粘贴到 JAVA项目中,同时在JAVA项目中定义此dll文件对应的interface: MyDll,这个接口需要继承JNA中的Library
      • (1) interface 的 code
        • public interface MyDll extends Library
          {
              MyDll myDll = (MyDll) Native.load("TESTDLL", MyDll.class);
              // myDll 是 MyDll 的一个实例
              // TESTDLL 是 TESTDLL.dll动态链接库文件的名字
              // MyDll.class:字节码文件,反射机制
              // 上面这行 code 就是将 TESTDLL.dll 实例化成一个对象
              int add(int a, int b);
          }

      • (2) mian()函数的code
        • public class Main
          {
              public static void main(String[] args)
              {
                  int value = MyDll.myDll.add(1, 1); // 通过MyDll中实现的myDll对象,此对象是由 TESTDLL.dll 实例化而成,因此可以调用 TESTDLL.dll库文件显示的add(int, int)方法
              System.out.println(value); // 2
              }
          }

  • 4、总结:
    • Java通过JNA(Java Native access)调用C++语言的函数实现
  • 4、DLL优点:
    • (1)DLL可以节省内存,并且减少页面的交换
      (2)DLL文件与调用者是独立的,只要DLL输出的接口不变(包括:名称,参数、返回值类型、或者是调用的约定等不变),更换DLL文件或者是更新DLL文件中的实现方法,而不去改变方法的(包括:名称,参数、返回值类型、或者是调用的约定等),就不会对调用者有影响。
      (3)不同编程语言编写的程序,只要按照函数约定就可以去调用DLL中的函数。
      (4)适用于大规模的软件开发,使得开发相对独立、低耦合,便于不同开发组织之间进行开发和测试
      (5)节约磁盘空间
  • 4、调用DLL文件的步骤:
    • 1. 写一个测试类
      2. 生成class文件
      3. 根据class文件生成class头文件,C/C++头文件
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号