JNI的使用

来源:互联网 发布:qq短信解冻软件 编辑:程序博客网 时间:2024/06/07 05:11

1. 首先在Java类中声明一个native方法 
    //native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
    public native void sayHello();
    
2. 用java的工具javah.exe生成包含native方法定义的C/C++头文件 
    - javah.exe在jdk的安装路径的bin目录下
    - 到native方法所在java文件生成的class文件路径下运行命令 javah 包名.类名
        以video1.TestNative为例,TestNative.class的路径为: C:\E\java\workspaces\myeclipseblue\JNITest\bin
    执行命令:C:\E\java\workspaces\myeclipseblue\JNITest\bin>javah video1.TestNative
    这样就会在C:\E\java\workspaces\myeclipseblue\JNITest\bin目录下产生一个video1_TestNative.h的C/C++头文件

3. 头文件中方法名的结构 
    例:JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv *, jobject);
    方法名Java_video1_TestNative_sayHello,以Java开头,以_分隔,依次为包名(包名之间也用下划线分隔)、类名、在java中声明的native方法名

4. 按照生成的C/C++头文件来写C/C++源文件 
    VC++6.0下,新建一个win32 Dynamic-link Library 工程,工程名为NativeCode,路径为C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode
    将第二步生成的头文件video1_TestNative.h、jni.h、jni_md.h 拷贝到C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode下
    在VC++6.0中引入这些该头文件

    jni.h在C:\Program Files\Java\jdk1.6.0_14\include下,jni_md.h在C:\Program Files\Java\jdk1.6.0_14\include\win32

    编写C/C++源代码source.cpp

5 . 编译 source.cpp,生成动态 连接库NativeCode.dll 

6. 将dll文件加入到环境变量path路径下。

    Eclipse启动后会加载环境变量Path,如果之后对path进行改变,Eclipse需要重启才能重新加载新的环境变量

7. java类中加载dll,然后调用声明的native方法 
    java类中加载dll:System.loadLibrary("NativeCode");

 

    完整的java代码

Java代码  收藏代码
  1. public class TestNative {  
  2.     //native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现  
  3.     public native void sayHello();  
  4.     public static void main(String[] args) {  
  5.         System.loadLibrary("NativeCode");  
  6.         new TestNative().sayHello();  
  7.     }  
  8. }  

    C/C++代码 source.cpp文件:

Cpp代码  收藏代码
  1. #include "video1_TestNative.h"  
  2. #include <iostream>  
  3. using namespace std;  
  4. JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj){  
  5.     cout<<"Hello Native Test !"<<endl;  
  6. }  
0 0
原创粉丝点击