JNI初探
JNI(Java Native Interface),中文为Java本地接口,简单点说就是使用java调用本地c或c++,通常是调用dll。
话不多说,还是先来看一个小例子。
1、编写一个简单的java类TestJni.java:
public class TestJni { /** * c++中的方法,实现在c++代码中 */ public native void callDll(); public static void main(String[] args) { // 调用dll,JniTest是dll的名字 System.loadLibrary("JniTest"); new TestJni().callDll(); } }
2、编译TestJni.java文件,命令:javac TestJni.java,生成文件TestJni.class.
3、生成头文件(.h),命令:javah TestJni,生成文件TestJni.h.
4、打开visual studio,新建一个win32控制台应用程序项目,在控制台应用程序中选择DLL。


5、引入头文件:
将第3步生成的TestJni.h头文件添加到c++项目头文件夹中,再将D:\Program Files\Java\jdk1.6.0\include下的jni.h和D:\Program Files\Java\jdk1.6.0\include\win32下的jni_md.h文件添加到c++项目头文件夹中,打开TestJni.h,将include <jni.h>换成include "jni.h"。
6、实现本地方法:
打开JniTest.cpp,添加代码如下:
// JniTest.cpp : 定义 DLL 应用程序的导出函数。 #include "stdafx.h" #include "TestJni.h" int main() { printf("Hello World!"); return 0; } // 实现Java中的callDll接口方法 JNIEXPORT void JNICALL Java_TestJni_callDll (JNIEnv *, jobject) { printf("Jni测试"); }
7、编译win32项目,在项目根目录\Debug\目录中找到JniTest.dll,将其添加到系统path中。
8、运行第1步写的java类:

可以看到在控制台下已经打印出了"Jni测试",表示已经成功调用了C++中方法。
今天就先到这儿吧,请多多指教!谢谢!

浙公网安备 33010602011771号