JAVA通過JNI調用c++本地方法dll

瞭解JNI:JAVA因其跨平臺特性而受人們喜愛,也正因此,使得它和本機各種內部聯繫變得很少,所以JNI(Java Native Interface)就是用來解決JAVA本地操作的一種方式。JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯繫,調用系統級的各接口方法。 

1.編寫java程序,編寫一個 聲明調用c++的實現方法,方法必須用native修飾,並且方法不可以有實現體

public class TestJNI {
	public native void sayHello();
	public static void main(String[] args) {
		System.loadLibrary("hello");  
                new TestJNI().sayHello();
	}
}
2.編譯:javac TestJNI.java生成class文件

3.javah TestJNI生成c++頭文件:TestJNI.h,代碼如下:

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

#ifndef _Included_TestJNI
#define _Included_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestJNI
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_TestJNI_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
4.生成動態鏈接庫文件hello.dll(我這裏用的是vc6.0,也可用vs的cl命令或其他方法)


將剛纔生成的TestJNI.h、jdk\include下面的jni.h、jdk\include\win32裏的jni_md.h 三個頭文件拷貝至工程,再新建一個cpp文件,代碼如下:

#include "TestJNI.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_TestJNI_sayHello(JNIEnv * env, jobject obj)//與TestJNI.h中生成的函數同名
{
	cout<<"hello,I am from dll!"<<endl;
}
編譯成功之後可以在工程的Debug文件夾下看到一個hello.dll,將其拷貝至TestJNI.class同文件夾

5.運行:java TestJNI




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章