简单使用JNI

JNI: java native interface的缩写,java的本地调用,主要是为c/c++设计的。

一般的调用步骤:

1.在java类中声明native方法,javac编译该文件为class文件

2.使用javah命令生成包含native方法声明的c/c++头文件

3.vs中创建工程,添加生成的头文件和需要引用的头文件

4.根据生成的头文件写c/c++源文件,并编译成动态链接库(dll)

5.将dll文件放到项目中,在java中加载动态链接库,然后使用里面的方法


目录结构:

简单使用JNI_第1张图片

java代码中声明本地方法:

public class TestJni {
	/**
	 * java调用c++
	 * @return
	 */
	public native void getjni();
}

使用javac命令,编译为字节码文件:


在该目录下就可以得到同名的class文件:

简单使用JNI_第2张图片


使用javah命令,得到头文件。文件要写绝对路径,路径要定位到包前,不要进入包(否则会报文件未找到错误):

简单使用JNI_第3张图片

这样就可以在项目中得到同名头文件(.h):

打开该文件你会看到,要引入jni.h文件:

简单使用JNI_第4张图片


创建c++工程:

新建项目,创建win32控制台程序:

简单使用JNI_第5张图片

点击下一步。

选择“dll”类型的空项目:

简单使用JNI_第6张图片

点击完成。

将需要的三个头文件复制到项目路径中。

简单使用JNI_第7张图片

jni.h在jdk的include目录下:
简单使用JNI_第8张图片

jni_md.h在jdk的include-->win32目录下:

简单使用JNI_第9张图片


新建空白源文件:
将头文件中声明的方法复制过来,写入具体的实现:

简单使用JNI_第10张图片

然后调试成功:
简单使用JNI_第11张图片

在debug目录下找到生成的dll文件:

简单使用JNI_第12张图片

工程结构:
简单使用JNI_第13张图片


将生成的dll文件复制到java项目中,是在根目录下,不要放到src里面:


在java中加载动态链接库,然后使用该方法:

public class TestMain {
	public static void main(String[] args) {
		System.loadLibrary("ConsoleApplication1");
		TestJni tjni = new TestJni();
		tjni.getjni();
	}
}
运行结果:



注意:

1.javah工具,我们通过它来生产jni头文件:

简单使用JNI_第14张图片

2.项目中添加的头文件不仅仅是你编译生成的那个,还需要jni.h 和jni_md.h,它们存放在jdk路径下,没有的话,会报文件未找到错误。

3.“jni.h”或者"jni_md.h"报错:找不到文件或者路径。<jni.h>这样是在系统目录下找的,改为"jni.h"这样就可以在项目目录下找到了。

你可能感兴趣的:(jni,vs,native)