知方号

知方号

Java通过JNA或JNI调用C++动态库

Java通过JNA或JNI调用C++动态库

 一.Java通过JNA调用C++动态库  

  1. java代码里添加jna依赖,修改pom.xml文件

        net.java.dev.jna        jna        5.7.0

  2.创建一个接口,该接口继承Library

  3. 创建一个实现类(先不运行)

  4. 打开VS创建C++应用程序,新建一个cpp文件,修改其头文件

  5. cpp文件引入头文件并实现方法

  6. 生成dll文件

       右键项目,点击属性,保证输出配置为dll。最后右键解决方案,点击生成解决方案

  7. 运行java程序进行测试 

二.Java通过JNI调用C++动态库 

  1. java创建一个测试类 

  2. cmd进入对应的文件夹路径并进行编译,编译时要把中文注释删了

      输入 javac JNITest.java 生成一个.class字节码文件

      再输入 javac -h ./ JNITest.java 生成一个.h头文件

  3. 打开VS创建C++应用程序,新建一个cpp文件,将上一步生成的.h头文件复制到项目目录下,并手动添加 

  4.以同样的方式添加jni.h和jni_md.h(在jdk中查找和复制)

  5. 如果引用jni.h时还有报错,则修改符号

  6. 编写cpp文件,引入头文件实现对应方法

  7. 生成dll文件

      右键项目,点击属性,保证输出配置为dll。最后右键解决方案,点击生成解决方案

  8. 将生成的动态库放到项目根目录里(或者是jdk的bin目录下),运行测试

三. JNI和JNA区别

    JNI允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即可。首先看下JNI调用C/C++的过程,注意写程序时自下而上,调用时自上而下。步骤非常的多,很麻烦。

        

    JNA框架解决了既需要编写java代码,又要编写C语言的代理方法及很多数据类型的转换的问题,它提供一组Java工具类用于在运行期动态访问系统本地共享类库而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射,大大降低了Java调用本体共享库的开发难度。

    JNA调用C/C++的过程大致如下:

        

    JNA 调用比 JNI 调用更方便!

    JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用java直接访问动态

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。