【扫盲知识】什么是JNI及JNI用来做什么?
JNI是Java Native Interface的缩写,中文为JAVA本地调用。java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
【实现步骤】
·编写带有native声明的方法的java类
·使用javac命令编译所编写的java类
·使用javah -jni java类名生成扩展名为h的头文件
·使用C/C++实现本地方法
·将C/C++编写的文件生成动态连接库dll文件
Java类<<<---Dll--->>>C/C++程序
Java类声明的方法native不用写实现,dll文件相当对外的接口,C语言写实现。
Java文件
命令行,当前目录下运行:javac TestNative.java生成class文件
运行:javah -jni TestNative生成.h头文件
编写C的实现
编译后可以生成TestNative.dll文件
命令行运行:java TestNative
可以看到输出结果。
JNI是Java Native Interface的缩写,中文为JAVA本地调用。java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
【实现步骤】
·编写带有native声明的方法的java类
·使用javac命令编译所编写的java类
·使用javah -jni java类名生成扩展名为h的头文件
·使用C/C++实现本地方法
·将C/C++编写的文件生成动态连接库dll文件
Java类<<<---Dll--->>>C/C++程序
Java类声明的方法native不用写实现,dll文件相当对外的接口,C语言写实现。
Java文件
public class TestNative{
//一个加分运算
private native int add(int x,int y);
public static void main(String[] args) {
TestNative tn = new TestNative();
int r = tn.add(30,1000);
System.out.println("result = "+r);
}
//加载动态库
static {
System.loadLibrary("TestNative");
}
}
命令行,当前目录下运行:javac TestNative.java生成class文件
运行:javah -jni TestNative生成.h头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNative */
#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestNative
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_TestNative_add
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
编写C的实现
#include<jni.h>;
JNIEXPORT jint JNICALL Java_TestNative_add
(JNIEnv *ev, jobject obj, jint x, jint y)
{
return x+y;
}
编译后可以生成TestNative.dll文件
命令行运行:java TestNative
可以看到输出结果。