编写Java代码:
package com.lixing.jni; public class HelloWorld { public native void helloWorld(); static { System.loadLibrary("HelloWorld"); } public static void main(String[] args) { new HelloWorld().helloWorld(); } }注意我们的helloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("HelloWorld")这句代码,它是在静态初始化块中定义的,系统用来装载HelloWorld共享库,这就是我们在后面生成的HelloWorld.dll(如果在其他的操作系统可能是其他的形式,比如HelloWorld.so)。
创建.h文件:
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到。/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_lixing_jni_HelloWorld */ #ifndef _Included_com_lixing_jni_HelloWorld #define _Included_com_lixing_jni_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: com_lixing_jni_HelloWorld * Method: helloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
编写本地实现代码:
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Win32 Console Application Project,然后创建一个HelloWorld.cpp文件,内容如下:#include "stdafx.h" #include<jni.h> #include"com_lixing_jni_HelloWorld.h" #include<stdio.h> JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld (JNIEnv *, jobject){ printf("HelloWorld!"); return; }
注意我们这里include了jni.h和刚才得到的com_lixing_jni_HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。Jni.h中又用到了"jni_md.h",在JAVA_HOME/include/win32里面。
打开DOS窗口,切换到HelloWorld.cpp所在目录。
输入cl /c HelloWorld.cpp并回车,生成HelloWorld.obj。
再输入link /dll HelloWorld.obj并回车,生成HelloWorld.dll。
将生成的dll文件放入system32文件夹即可。
运行结果: HelloWorld!