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

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

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

    向左走,向右走。。。
    永遠(yuǎn)不回頭
    posts - 16,comments - 17,trackbacks - 0

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

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

        整個(gè)實(shí)現(xiàn)過程可以分為五步來完成:

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

    package example;

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

        
        
    public native String getNameCPP();
    }


    2) 使用javah產(chǎn)生對(duì)應(yīng)的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)實(shí)現(xiàn)對(duì)應(yīng)的CPP代碼:
    #include "example_TestJNI.h"
    #include 
    <string>

    JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
      (JNIEnv 
    * env, jobject)
    {
        
    //TODO 可以在此調(diào)用其他的代碼
        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)執(zhí)行
    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) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA 相關(guān)技術(shù)
    主站蜘蛛池模板: 亚洲国产成人AV在线播放| 亚洲精品自在线拍| 边摸边脱吃奶边高潮视频免费 | 黄页网站在线视频免费| 日韩激情淫片免费看| 亚洲中文字幕一二三四区| 性盈盈影院免费视频观看在线一区| 在线综合亚洲欧洲综合网站| 岛国av无码免费无禁网站| 亚洲欧美日韩国产精品一区| 国产片免费在线观看| 大片免费观看92在线视频线视频| 亚洲国产精品尤物yw在线| 国产A∨免费精品视频| 亚洲精品乱码久久久久久按摩| 亚洲精品免费在线观看| 亚洲国产精品xo在线观看| 在线观看无码的免费网站| 老司机精品视频免费| 亚洲av最新在线网址| 国产大片线上免费观看| 深夜特黄a级毛片免费播放| 亚洲精品国产美女久久久| 久久久久免费看黄a级试看| 亚洲乱码一二三四区乱码| 四虎国产精品免费久久影院| aa级女人大片喷水视频免费| 亚洲香蕉免费有线视频| 卡一卡二卡三在线入口免费| 在线免费视频你懂的| 亚洲伊人久久大香线蕉结合| 免费二级毛片免费完整视频| 免费无码作爱视频| 99久久婷婷国产综合亚洲| 亚洲人妻av伦理| 中文毛片无遮挡高潮免费| 一级特黄色毛片免费看| 亚洲国产理论片在线播放| 亚洲中文字幕伊人久久无码| 1024免费福利永久观看网站| 人体大胆做受免费视频|