JNI简介

JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。

1.在java类中声明一个native方法

native是一个计算机函数,它修饰的方法就是一个非java代码的接口,方法的具体实现并不是java,而是由其他语言(比如c或者c++)。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
Java调用C++之JNI使用

2. 使用Javah命令生成包含native方法定义的C/C++头文件

Jdk11中将javah命令整合到javac中,可通过以下两种命令生成:
1.javac -h . Hello.java
2.javac -h -jni Hello.java
Java调用C++之JNI使用
生成的头文件内容如下
Java调用C++之JNI使用

3.利用Visual Studio 2017生成C++动态库

准备好3个头文件,一个是2中生成的.h文件,一个是jni.h,在jdk安装目录的include目录下,还有一个是jni_md.h,在Include目录下的win32目录里
Java调用C++之JNI使用
打开Visual Studio 2017,新建一个win32项目,命名为hello
Java调用C++之JNI使用
点下一步,
Java调用C++之JNI使用
点完成
将3个头文件拷贝到项目目录里面
Java调用C++之JNI使用
将头文件导入到工程里面,点击头文件,添加现有项
Java调用C++之JNI使用
点击源文件,生成一个hello.cpp的C++文件,写入如下代码
Java调用C++之JNI使用
生成Release版本,62位操作系统的改为x64,右键项目,生成
Java调用C++之JNI使用
返回上一级目录,在X64文件夹中找到hello.dll文件,并将其拷贝到jdk安装目录的bin目录下,动态库生成完成。

4.打开eclipse, Java类中加载.dll,然后调用声明的native方法

加载动态链接库,创建对象调用hello()函数
Java调用C++之JNI使用
运行结果如下
Java调用C++之JNI使用
以上

相关文章: