Java调用C++类库--JNI

时间:2022-08-10 20:20:34
JNI是Java平台中的一个重要的功能,这里我把我做的Demo总结一下,分享一下,我会把每个步骤尽量的详细的展现出来。 这里我就不讲解JNI的原理了,google,百度一下,到处都是 好了,直接来讲步骤吧,文章最后给出了C++和Java的Demo 第一步:安装Java jdk,eclipse。 第二步,配置Java环境变量,java环境变量配置 第三步,新建一个Java应用程序,名为:TestNativeCode,包名:com.liyong.TestNativeCode,类名:TestNativeCode 第四步,在TestNativeCode类里面添加如下代码: Java调用C++类库--JNI
package com.liyong.TestNativeCode;

public class TestNativeCode {
public native void sayHello();
public static void main(String[] args) {
System.loadLibrary(
"NativeCode");
TestNativeCode nativeCode
=new TestNativeCode();
nativeCode.sayHello();
}
}
Java调用C++类库--JNI

第五步,编译Java文件
1,运行-->cmd-->进入TestNativeCode项目的src目录下编译该Java类,命令 javac ./com/liyong/TestNativeCode/TestNativeCode.java。在该TestNativeCode.java目录下会生成TestNativeCode.class文件
2,使用javah生成头文件,命令 javah -jni com.liyong.TestNativeCode.TestNativeCode。在src目录下生成com_liyong_TestNativeCode_TestNativeCode.h文件。

第六步,编译C++类库
1,打开VS2008,新建Win32 项目NativeCode,如图所示:

Java调用C++类库--JNI

确定后,在“应用程序类型”中选择“DLL”,如图:

Java调用C++类库--JNI

2,将上一步生成的com_liyong_TestNativeCode_TestNativeCode.h添加到项目头文件中。

3,在NativeCode项目的“源文件”中添加NativeCode.cpp文件,具体如蓉如下

Java调用C++类库--JNI
#include "stdafx.h"
#include
"com_liyong_TestNativeCode_TestNativeCode.h"
#include
<iostream>
using namespace std;

JNIEXPORT
void JNICALL Java_com_liyong_TestNativeCode_TestNativeCode_sayHello(JNIEnv * env, jobject obj)
{
cout
<<"Hello NDK!"<<endl;
//printf("Hello NDK!");
}
Java调用C++类库--JNI

4,使用Release编译,生成NativeCode.dll,将其拷贝到java环境变量Java_Home的Bin目录下,比如,LZ的Java_Home目录是
C:\Program Files\Java\jdk1.6.0_25,将NativeCode.dll拷贝到C:\Program Files\Java\jdk1.6.0_25\bin目录下。

第七步,运行Java应用程序,会输出“Hello NDK!”,Ok,成功!这里只是一个简单的例子,具体的应用就靠大家举一反三啦

这里给出Demo的源码:C++:NativeCode.rar Java:TestNativeCode.rar