<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 16,comments - 17,trackbacks - 0

        做項目,無論是遺留產品的再生產,還是對遺留產品的再利用,都不可避免的會出現一大堆的異構現象。解決異構通信問題是這類項目的主要問題。以前看見這種情況第一個解決方案就是Socket通信。說實在的自己實現Socket通信,定制通信協議,或者是實現已有的通信協議都是很頭痛的事情。本人有不堪回首的歷史經歷。

        最近同樣在項目中需要去解決一個異構問題,由于時間的緊迫,以及先天的運行環境(兩個部分是運行在同一臺機器上的)。考慮到了使用JNI,結果表明JNI是完全可以勝任目前的角色的。以前沒有了解過JNI,總是以為它這不好那不好,用了用,表現還不錯,而且實現起來非常之簡單。

        整個實現過程可以分為五步來完成:

    1)寫一個聲明了native的Java文件:

    package example;

    public class TestJNI 
    {
        
    static 
    {
            System.loadLibrary(
    "test"
    );
        }

        
        
    public native String getNameCPP();
    }


    2) 使用javah產生對應的CPP頭文件:
    命令:javah -classpath <path> -jni example.TestJNI -d <out_dir>
    生成的頭文件example_TestJNI.h如下:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include 
    <jni.h>
    /* Header for class example_TestJNI */

    #ifndef _Included_example_TestJNI
    #define _Included_example_TestJNI
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     example_TestJNI
     * Method:    getNameForCPP
     * Signature: ()Ljava/lang/String;
     
    */

    JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
      (JNIEnv 
    *, jobject);

    #ifdef __cplusplus
    }

    #endif
    #endif

    3)實現對應的CPP代碼:
    #include "example_TestJNI.h"
    #include 
    <string>

    JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
      (JNIEnv 
    * env, jobject)
    {
        
    //TODO 可以在此調用其他的代碼
        std::string strName = "Tower";
        
    return env->NewStringUTF(strName.c_str());
    }


    4) 編譯CPP代碼
    命令:g++ -o libtest.so -shared -I<include_path> -I<java_home>/include -I<java_home>/include/linux example_TestJNI.cpp

    5)執行
    package example;

    public class Test {
        
    public static void main(String[] args) {
            TestJNI test 
    = new TestJNI();
            System.
    out.println("Hello " + test.getNameForCPP());
        }

    }


    export LD_EXPORT_PATH=<so_path>
    java -cp <path> -Djava.library.path=<so_path> example.Test
    輸出:Hello Tower
    posted on 2005-03-22 18:39 非飛 閱讀(3354) 評論(0)  編輯  收藏 所屬分類: JAVA 相關技術
    主站蜘蛛池模板: 久久久久久免费一区二区三区| 亚洲人成综合网站7777香蕉| 一级A毛片免费观看久久精品 | 国产精品高清免费网站| 国产jizzjizz免费视频| 美国毛片亚洲社区在线观看| 精品国产免费观看| 国产精品自拍亚洲| 日韩精品亚洲专区在线观看| 日日摸夜夜添夜夜免费视频| 国产亚洲情侣一区二区无码AV| 国产国产人免费人成成免视频| 亚洲精品无码av天堂| 国产免费人成视频在线播放播 | 亚洲人成电影在线观看网| 亚欧免费视频一区二区三区| 亚洲精品成人久久| 成人午夜免费福利| 黄网站色视频免费观看45分钟| 国产日产亚洲系列最新| 久久午夜夜伦鲁鲁片无码免费| 亚洲国产成人va在线观看网址| 成人激情免费视频| 春意影院午夜爽爽爽免费| 欧洲亚洲国产清在高| 69xx免费观看视频| 羞羞漫画小舞被黄漫免费| 亚洲愉拍99热成人精品热久久 | 精品少妇人妻AV免费久久洗澡| 丰满妇女做a级毛片免费观看 | 亚洲AV天天做在线观看| www.999精品视频观看免费| 国产亚洲精品美女久久久久久下载| 中文字幕久久亚洲一区| 精品女同一区二区三区免费站| 亚洲乱人伦中文字幕无码| 亚洲精品成人片在线观看精品字幕| 3344永久在线观看视频免费首页| 亚洲精品第一国产综合亚AV| 好看的亚洲黄色经典| 无码免费午夜福利片在线|