JNI 调用 DLL
JNI 使用流程
JNI 是 Java Native Interface的简称,该功能主要是用于Java调用C的动态库,实现某些功能,其使用过程主要分为以下几步:
新建一个Java类,该类中定义自己需要的 C 端的native方法;
根据该类编译生成的.class文件生成 C 所需要的头文件,也就是常说的.h文件;
【注】1、若没有自动编译生成的.class文件,可以使用Java命令直接生成。
2、生成 .h 文件的命令也为Java命令,即javah。根据生成的 .h 文件编写C的功能实现,最后生成对应的dll,此处需要注意:生成的dll 的位数需要和Java环境的位数相同,否则会报错。
拷贝生成的dll文件到系统环境配置的某一文件夹下,最好配置在C:\Windows\System32或C:\Windows\SysWOW64;其中System32是配置64位的dll,SysWOW64配置32位的dll。
运行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相关推荐
- java jni dll路径_Java中Jni调用DLL文件试验
Java中Jni调用DLL文件试验 下面是小编整理的Java中Jni调用DLL文件试验内容,希望可以为您带来帮助!更多内容请关注应届毕业生考试网! 所有文件均在E:\路径下. 安装jdk1.6.0_0 ...
- java jni调用dll文件_Java通过jni调用动态链接库
(1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...
- Windows系统下通过JNI调用dll动态库的实现
目的:java代码使用jni获取数据 工具: eclipse + Microsoft visual studio (c++) 业务代码: Java代码业务实现: package com.weip.jn ...
- JNI的方式调用DLL(SO)(上)
最近有个项目要调用原有的DLL文件,本来准备使用JNA,可是客户不同意,非要使用JNI的方式.万般无奈之下,只能重新使用JNI,现将JAVA调用动态链接库的一般方法总结如下. JNI是Java Nat ...
- java中通过JNA调用dll
---恢复内容开始--- 1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进 ...
- Android Jni 调用
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...
- 【Android】JNI调用(完整版)
原文出处:http://blog.csdn.net/kangyaping/article/details/6584027#t0 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... ...
- java中调用dll文件的两种方法
https://www.cnblogs.com/huozhong/p/5830485.html JNA地址:http://blog.csdn.net/shendl/article/details/35 ...
- java 如何调用dll_java调用dll方法总结
常用的就是jni,jnative(基于jni封装了自己的jar包) 注意:java调用dll,必须dll里做了对应的处理.列如:方法名必须为_java_包名_类名_方法名 使用JNI调用dll步骤 新 ...
- Java通过JNI调用C++的DLL库
2019独角兽企业重金招聘Python工程师标准>>> Java通过JNI实现调用C++程序 好久没碰JNI这个东西了,刚工作的时候自己写过点东西,这么些年很少用到,最近一个项目又用 ...
最新文章
- 4.通过Ubuntu指令生成GIF图片
- 第五章 MongoDb索引优化 5.4
- 【Qt】Qt窗口几何布局
- 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
- 上海区块链会议演讲ppt_进行第一次会议演讲的完整指南
- 计算机专业能评电子工程师吗,计算机工程师职称 评定条件
- Debian Linux下如何以root账号登录桌面
- 下载Bootstrap3源码版本
- 【less-6】sqli-labs靶场第六关(类似less-5)
- java实验 输入输出_实验十三 Java输入输出(一)
- 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
- 【深度优先搜索】计蒜客:置换的玩笑
- 【教程】使用腾讯云轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
- 联想计算机的功能键,联想fn键怎么用 联想fn组合按键功能介绍【图文】
- (附源码)springboot基于微信小程序的超市收银系统 毕业设计 271611
- 诗歌一 我自倾杯,君且随意
- 坚果J10和当贝F3体验分享,智能家用投影仪究竟应该怎么选?
- 因数据迁移导致跨库连接失效的解决办法
- Python3:好玩游戏的物品清单 和 列表到字典的函数
- Qt开源版下载官网地址 macOS