JNI 使用流程

JNI 是 Java Native Interface的简称,该功能主要是用于Java调用C的动态库,实现某些功能,其使用过程主要分为以下几步:

  1. 新建一个Java类,该类中定义自己需要的 C 端的native方法;

  2. 根据该类编译生成的.class文件生成 C 所需要的头文件,也就是常说的.h文件;
    【注】1、若没有自动编译生成的.class文件,可以使用Java命令直接生成。
    2、生成 .h 文件的命令也为Java命令,即javah。

  3. 根据生成的 .h 文件编写C的功能实现,最后生成对应的dll,此处需要注意:生成的dll 的位数需要和Java环境的位数相同,否则会报错。

  4. 拷贝生成的dll文件到系统环境配置的某一文件夹下,最好配置在C:\Windows\System32或C:\Windows\SysWOW64;其中System32是配置64位的dll,SysWOW64配置32位的dll。

  5. 运行Java程序即可。

代码实例和简单解析

Java类,其中加载动态库和使用动态库。

package proj1;public class CallCMethod {static {System.out.println(System.getProperty("java.library.path"));  // 打印系统环境变量配置的路径// 加载dll,testProject1为生成的动态库的名称,此处为了平台的适配性,不用加后缀,因为Linux的环境后缀为.so,Windows的为.dll// 在平台加载的时候,底层代码会根据实际环境去查询与该名称匹配的动态库。System.loadLibrary("testProject1");   }public native int test1(int a, int b);  // native方法,具体实现在C中public static void main(String[] args) {CallCMethod testCLibCall = new CallCMethod();int a = testCLibCall.test1(1, 2);System.out.println("==" + a);}
}

javah命令使用:

生成的.h文件命名为包名+类名,为proj1_CallCMethod.h,具体内容如下:

编写.c文件,具体如下:

#include "stdio.h"
#include "proj1_CallCMethod.h"
#include "jni_md.h"     // 可在JDK的安装目录找到jdk1.8\include\win32
#include "jni.h"//#pragma comment(lib,"XXX_API.lib")   // 使用外部dll时需要,不使用则不用写JNIEXPORT jint JNICALL Java_proj1_CallCMethod_test1(JNIEnv * env, jobject jo, jint a, jint b){//printf("The args are: %d, %d", a, b);int c = a + b;printf("The result is: %d", c);return c;
}

生成dll,然后拷贝dll到对应的目录(上面有说)。
最后的运行结果如下:

【本节完,后续将会写JNA的相关使用记录博客…】

JNI 调用 DLL相关推荐

  1. java jni dll路径_Java中Jni调用DLL文件试验

    Java中Jni调用DLL文件试验 下面是小编整理的Java中Jni调用DLL文件试验内容,希望可以为您带来帮助!更多内容请关注应届毕业生考试网! 所有文件均在E:\路径下. 安装jdk1.6.0_0 ...

  2. java jni调用dll文件_Java通过jni调用动态链接库

    (1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...

  3. Windows系统下通过JNI调用dll动态库的实现

    目的:java代码使用jni获取数据 工具: eclipse + Microsoft visual studio (c++) 业务代码: Java代码业务实现: package com.weip.jn ...

  4. JNI的方式调用DLL(SO)(上)

    最近有个项目要调用原有的DLL文件,本来准备使用JNA,可是客户不同意,非要使用JNI的方式.万般无奈之下,只能重新使用JNI,现将JAVA调用动态链接库的一般方法总结如下. JNI是Java Nat ...

  5. java中通过JNA调用dll

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

  6. Android Jni 调用

    Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...

  7. 【Android】JNI调用(完整版)

    原文出处:http://blog.csdn.net/kangyaping/article/details/6584027#t0 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... ...

  8. java中调用dll文件的两种方法

    https://www.cnblogs.com/huozhong/p/5830485.html JNA地址:http://blog.csdn.net/shendl/article/details/35 ...

  9. java 如何调用dll_java调用dll方法总结

    常用的就是jni,jnative(基于jni封装了自己的jar包) 注意:java调用dll,必须dll里做了对应的处理.列如:方法名必须为_java_包名_类名_方法名 使用JNI调用dll步骤 新 ...

  10. Java通过JNI调用C++的DLL库

    2019独角兽企业重金招聘Python工程师标准>>> Java通过JNI实现调用C++程序 好久没碰JNI这个东西了,刚工作的时候自己写过点东西,这么些年很少用到,最近一个项目又用 ...

最新文章

  1. 4.通过Ubuntu指令生成GIF图片
  2. 第五章 MongoDb索引优化 5.4
  3. 【Qt】Qt窗口几何布局
  4. 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
  5. 上海区块链会议演讲ppt_进行第一次会议演讲的完整指南
  6. 计算机专业能评电子工程师吗,计算机工程师职称 评定条件
  7. Debian Linux下如何以root账号登录桌面
  8. 下载Bootstrap3源码版本
  9. 【less-6】sqli-labs靶场第六关(类似less-5)
  10. java实验 输入输出_实验十三 Java输入输出(一)
  11. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
  12. 【深度优先搜索】计蒜客:置换的玩笑
  13. 【教程】使用腾讯云轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
  14. 联想计算机的功能键,联想fn键怎么用 联想fn组合按键功能介绍【图文】
  15. (附源码)springboot基于微信小程序的超市收银系统 毕业设计 271611
  16. 诗歌一 我自倾杯,君且随意
  17. 坚果J10和当贝F3体验分享,智能家用投影仪究竟应该怎么选?
  18. 因数据迁移导致跨库连接失效的解决办法
  19. Python3:好玩游戏的物品清单 和 列表到字典的函数
  20. Qt开源版下载官网地址 macOS

热门文章

  1. PDF转换成word转换器绿色版使用步骤
  2. 计算机中word2007,Word中2007版在电脑里发现打不开的解决方法
  3. 基于voidAR实现增强现实之初音未来
  4. CCNA考试题库中英文翻译版及答案1
  5. 主键中mappedBy的具体使用及其含义
  6. java地图 热力图,Spring Boot+高德地图热力图静态数据展示
  7. 推荐的开源 PHP CMS 系统
  8. Get和Post请求区别和使用场景
  9. 【计算机系统组成】IO设备知识要点
  10. U盘安装CentOS系统详细教程