JNI(Java调用C/C++代码)

back>>

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代码

public class TestNative {
	//native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
	public native void sayHello();
	public static void main(String[] args) {
		System.loadLibrary("NativeCode");
		new TestNative().sayHello();
	}
}

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

#include "video1_TestNative.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj){
	cout<<"Hello Native Test !"<<endl;
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值