如何创建一个简单的JNI调用

来源:互联网 发布:淘宝图片助手官方下载 编辑:程序博客网 时间:2024/05/08 20:50

JNI就是java native interface 就是java方法调用本地的C++的代码。

创建JNI的几个过程

(1)首先在java类中生命一个native方法

(2)使用javah 将包含native方法的类编译成c++的头文件

(3)按照C++头文件来写C++的源文件

(4)将C++的源文件编译成动态链接库

(5)把DLL文件加入到PATH环境变量下

(6)java类中加载DLL,然后调用声明的native方法

首先在IDEeclipse中创建一个项目:

package jni;


public class TestNative {

public native void sayhello();  //本地方法
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.loadLibrary("NativeCode");
TestNative tst=new TestNative();
tst.sayhello();
}
}

我的eclipse存放的路径是E:\学习资料\java\eclipise_flexpractice\eclipise_flexpractice\TestNativeCode

使用windows的dos进入到这个工程的路径即(E:\学习资料\java\eclipise_flexpractice\eclipise_flexpractice\TestNativeCode

使用javah 命令对bin目录下的TestNative .class使用javah

javah  jni.TestNative

生成一个jni_TestNative.h 头文件

使用VS创建一个DLL项目,将jni_TestNative.h 加载到该DLL的头文件中,同时创建一个Source.cpp 实现该头文件中的方法,如下:

这个自动生成的jni_TestNative.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class jni_TestNative */


#ifndef _Included_jni_TestNative
#define _Included_jni_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jni_TestNative
 * Method:    sayhello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jni_TestNative_sayhello
  (JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif

Source.cpp 源文件

#include "Source.h"
#include "jni_TestNative.h"
#include <iostream>
using namespace std;


Source::Source(void)
{
}


Source::~Source(void)
{
}
JNIEXPORT void JNICALL Java_jni_TestNative_sayhello(JNIEnv *env, jobject onject){
  cout<<"hello world"<<endl;
 }

同时还需要将jdk 中include目录下的jni.h 以及include/Win32/jni_md.h头文件复制到VS相应的路径下,我的VS的项目路径是:E:\c++\NativeCode\NativeCode

最后执行,会在项目的debug下生成NativeCode.dll

同时将将包含NativeCode.dll的路径E:\c++\NativeCode\debug 加载到系统的环境变量中,IDE eclipse就可以自动到path目录下加载相应的NativeCode.dll。

0 0
原创粉丝点击