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++中方法。  

今天就先到这儿吧,请多多指教!谢谢!

posted @ 2012-01-05 13:12  justforpeople  阅读(140)  评论(0)    收藏  举报