JNI学习1
java是跨平臺的語言,但是在有些時候仍然是有需要調用本地代碼(通常由c/c++編寫)
sun公司提供的JNI是java平臺的一個功能強大的接口。這個JNI接口提供了Java與操作系統本地代碼相互
調用的功能。
Java中調用C/C++代碼的步驟:
首先在java類中聲明一個native方法。
bin/javah.exe 生成相應的c/c++頭文件
按照生成的頭文件編寫對應的c/c++代碼
編譯生成dll
把dll文件加入到PATH環境變量下。
Java類中加載DLL,然后調用聲明的Native方法。
使用JNI的兩個弊端:
使用了JNI,那么這個Java Application將不能跨平臺了。如果要移植到別的平臺上,那么native代碼就需
要重新進行編寫。
Java是強類型的語言,而c/c++不是。因此,你必須再寫JNI時更小心。
相關文件
TestNative.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class TestNative */
#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
?* Class:???? TestNative
?* Method:??? sayHello
?* Signature: ()V
?*/
JNIEXPORT void JNICALL Java_TestNative_sayHello
? (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
TestNative.java
/**
?* @(#)TestNative.java
?*
?*
?* @author leo
?* @version 1.00 2008/3/31
?*/
public class TestNative {
??? public TestNative() {
??? }
???
??? //表示是c/c++實現
??? public native void sayHello();
???
??? public static void main(String[] args) {
??? ?System.loadLibrary("nativecode.dll");
??? ?
??? ?TestNative tst = new TestNative();
??? ?
??? ?tst.sayHello();
??? }
}
source.cpp
#include "jni.h"
#include "TestNative.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_TestNative_sayHello (JNIEnv *env, jobject obj)
{
?cout << "Hello World!" <<endl;
}
轉載于:https://www.cnblogs.com/tongzhiyong/archive/2008/03/30/1129901.html
總結
- 上一篇: java中对象模型与数据库中的关系模型
- 下一篇: NHibernate分页的测试