JNI入门介绍

    1.简介
  
  JNI是Java Native Interface的缩写,它的设计目的是:
  
  The standard Java class library may not support the platform-dependent features needed by your application.
  
  You may already have a library or application written in another programming language and you wish to make it accessible to Java applications
  
  You may want to implement a small portion of time-critical code in a lower-level programming language, such as assembly, and then have your Java application call these functions
  
  2.JNI的书写步骤
  
  编写带有native声明的方法的java类
  
  使用javac命令编译所编写的java类
  
  使用javah ?jni java类名生成扩展名为h的头文件
  
  使用C/C++实现本地方法
  
  将C/C++编写的文件生成动态连接库

现在就开始,Let's go!

1) 编写java程序:

就已精典的"HelloWorld"为例.

public class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new HelloWorld().displayHelloWorld(); } }

声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。其中方法的参数和返回值在后面讲述。
  Load动态库:System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法displayHelloWorld()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“hello”是动态库的名字。我的文件放在E盘根目录下.

然后把命令转到E盘.

 


2) 编译没有什么好说的了
  
  javac HelloWorld.java
  
3) 生成扩展名为h的头文件
  
  javah  HelloWorld

4) 编写本地方法

编写之前需要把 C:/Program Files/Java/jdk1.6.0_16/include/win32  下的jni.h   jawt_md.h   jni_md.h复制到

C:/Program Files/Microsoft Visual Studio/VC98/Include下面.
  
  实现和由javah命令生成的头文件里面声明的方法名相同的方法。
// ABD.cpp : Defines the entry point for the DLL application. #include <HelloWorld.h> #include "jni.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!/n"); return; }

 

5) 生成动态库

JNI入门介绍_第1张图片

 点击编译,此时会在工程的Debug下产生一个文件ABD.dll.

JNI入门介绍_第2张图片

把文件copy到E盘根目录.

修改名字为hello为什么修改后面会告诉大家.

然后运行

如果所示

精典的Hello world!就出来了.

 

注意:

1.生成的dll文件要和你java里面调用的名字对应.

2.  *.h文件要放到对应的目录下.不然会报错.not open include file ......

 

你可能感兴趣的:(java,jni,assembly,application,library,features)