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

news/2024/7/8 2:40:43

(1)JNI简介

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。 简单的来说JNI就是方便了Java调用c,c++语言的函数;java通过JNI提供接口(头文件),c,c++实现这些函数供java调用。

()Java调用动态库的第一步:编写Java JNI接口代码如下

package com.xiaomo.jni;

public class JNIInterface {

static{

System.loadLibrary("JNITest");//这里的“JNITest”就是我们需要生成的dll本地动态链接库,书写库名就可以了,但是这个dll或则so文件必须在path的目录下,要不然会找不到

}

//这里我们需要给这个库提供接口函数

public native int add(int a,int b);//加法函数

public native int mis(int a,int b);//减法函数

}

通过java c命令生成JNIInterface.class文件如下图所示:

533f763b74d977c0c629922e99e8221e.png

这个时候会在相应的文件夹目录下生成.class文件如下图所示:

a09c1a5d844f0615682e69ed2fd950c4.png

(2)通过javah 命令将JNIInterface编译成.h头文件,具体编译的时候需要包名.类名,如下图所示

9980fc14298e9a47f6b4a2474c793de9.png

通过编译后出现一个com_xiaomo_jni_JNIInterface.h的头文件,这个将相当于Java通过JNI提供给动态链接库的头文件

(3)第三步当然是在编写本地动态库的时候引入这个头文件,实现该头文件的方法。将编写好的JNITest.dll文件房子啊JRE的bin目录下,或者是JDK的bin目录下

(4)第四步,在java端实例化JNIInterface这个类,调用这个类的方法。具体的会遇到很多的问题,大多都是路径问题,生成的dll文件是32位,64位的问题。


http://lihuaxi.xjx100.cn/news/268974.html

相关文章

最大流学习笔记(1)

1 流网络。流网络G(V,E)是一个有向图,每条边$(u,v)\in E$有一个非负容量值$c(u,v)\geq 0$.如果$(u,v)\notin E,c(u,v)0$.另外有一个源节点s和汇点t。 2 流。G中的流是一个实值函数$f:V\times V\rightarrow R$,满足: (1&#xff09…

Git远程仓库Github

Git远程仓库Github 目录 一、创建远程仓库 二、配置SSH 三、克隆项目 四、多人协同开发 五、代码冲突 六、标签 七、分支 提示:Github网站作为远程代码仓库时的操作和本地代码仓库一样的,只是仓库位置不同而已! 准备Git源代码仓库 htt…

Nature:16年前的论文生成软件SCIgen至今仍有人用,骗过同行评审,论文被接收...

视学算法报道转载自:机器之心编辑:杜伟计算机程序自动生成的逻辑不通的论文也能被接收,你敢信?然而,在计算机科学领域,这种事情的的确确在发生着。近日,Nature 的一篇文章揭露了由计算机程序 SC…

最差的算法工程师能差到什么程度?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达编辑:Amusi(CVer) | 来源:知乎https://www.zhihu.com/question/347545092本文仅作为学术分享,如果侵权&#x…

配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据

第一章 简介 场景描述 根据最近客户的需求,他们需要自动维护MOSS2010列表数据导出到Excel的数据实时同步,就是列表添加记录后,导出的Excel列表自动同步数据过来。 第二章 配置方法 1. 打开MOSS2010站点http://moss:8001的要导出的列表 2. 点【…

java最长类名_在java规范中类命名的字符长度是多少?

展开全部在java规范中没2113有限制类名的长度,但5261是系统4102本身会限制。下面是1653详细说明:java这个回语言本身答:没有限制。java虚拟机本身的规范:The length of field and method names, field and method descriptors,and…

MongoDB中mapReduce的使用

MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map function(){emit(this.cat_id,this.price);#根据cat_id进行分组,对price字段进行操作 } var r…

STM32F103 与 STM32F407引脚兼容问题

突袭网收集的解决方案如下 解决方案1: STM32F103有的功能407都有,并且这些功能的引脚完全兼容,只是程序不同而已。。。而STM32F407有的功能103不一定有,因为407强大些。。。。。。希望对你有用 解决方案2: 不能。407支…