国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第一個JNI程序--HelloNative

2019-11-18 15:06:26
字體:
來源:轉載
供稿:網友

  有各種各樣的原因需要使用到已有的遺留代碼。此時,使用JNI,可以非常方便地調用已有的穩定的本地代碼。把遺留系統和新的代碼整合起來。下面我們來看如何寫一個本地C代碼調用的Hello World版本。

在本實例中,包括下面幾個類:
HelloNative.java:實用類,提供一個靜態本地方法greeting(),打印出一個消息串。其中greeting方法調用了下面的本地代碼。
HelloNative.c:本地實現代碼。
HelloNativeTest.java:應用主文件,調用HelloNative實用類的greeting()方法。
HelloNative.java

//HelloNative.javaclass HelloNative{ public native static void greeting(); static { //HelloNative是下面將由HelloNative.c生成的dll文件。System.loadLibrary("HelloNative"); }};

編譯上面的.java文件后,在生成的.class目錄下,使用javah命令生成HelloNative.class的C頭文件:
javah HelloNative
HelloNative.h

生成的HelloNative.h文件如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */#ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C" {#endif/* * Class: HelloNative * Method: greeting * Signature: ()V */JNIEXPORT void JNICALL Java_HelloNative_greeting (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif
HelloNative.c
拷貝生成的HelloNative.h,另存為HelloNative.c,并填充JNICALL Java_HelloNative_greeting方法體,得到下面的
HelloNative.c:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */#ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C" {#endif/* * Class: HelloNative * Method: greeting * Signature: ()V */JNIEXPORT void JNICALL Java_HelloNative_greeting (JNIEnv * env, jclass cl){ 使用Windows自帶的c/c++編譯器,編譯上面的HelloNative.c:

cl -Id:j2sdk1.4.1include -Id:j2sdk1.4.1includewin32 -LD HelloNative.c -FeHelloNative.dll

執行這條命令后將生成HelloNative.dll文件。這個DLL動態鏈接庫就是下面我們在HelloNative.java文件中調用的本地文件。假如是在Unix/
linux下,請使用相應操作系統的c編譯器,生成的庫文件是HelloNative.so。
開始運行吧

至此,我們編寫的Windows平臺上的本地庫文件和Java文件已經預備就緒,下面寫一個簡單的測試程序來測試一下本地調用吧。

class HelloNativeTest { public static void main(String[] args) { HelloNative.greeting(); }}
編譯、運行這個程序,將打印出Native版的:
Hello, Native World!

也許你認為這并沒有什么非凡,但假如你知道這個消息串是使用你自己寫的C庫文件中調用生成的時候,你就會有知道這有著非常重大的意義。就似乎尋寶者在人跡罕至的荒山之中,忽然看到一塊史前陶片,陶片本身并沒有什么非凡,但這,也許已經為你啟開了寶藏之門。

from-javaresearch

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双流县| 静海县| 甘谷县| 攀枝花市| 博湖县| 寿阳县| 华池县| 西平县| 余庆县| 舒兰市| 福清市| 侯马市| 无为县| 客服| 汉中市| 洛浦县| 浪卡子县| 宣恩县| 青冈县| 灵台县| 开平市| 柞水县| 佳木斯市| 阿克陶县| 平舆县| 五大连池市| 乌什县| 买车| 朝阳县| 叶城县| 巫溪县| 凤阳县| 门源| 西宁市| 永州市| 无锡市| 德昌县| 兴义市| 江川县| 泊头市| 西吉县|