<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ù)
    主站蜘蛛池模板: 亚洲精品又粗又大又爽A片| 国产午夜亚洲精品不卡免下载| 久久精品国产亚洲av影院| 在线视频精品免费| 欧洲 亚洲 国产图片综合| 亚洲成年人啊啊aa在线观看| 成全视频在线观看免费| 亚洲国产精品综合久久20| 国产精品亚洲mnbav网站 | 中文字幕免费在线看| 久久精品亚洲视频| 毛片免费视频播放| 国产午夜无码精品免费看动漫| 亚洲熟伦熟女新五十路熟妇| 性色午夜视频免费男人的天堂| 国产亚洲综合色就色| 亚洲精品视频在线免费| 一边摸一边桶一边脱免费视频 | 18女人水真多免费高清毛片| 国产精品亚洲一区二区在线观看| 久久天天躁狠狠躁夜夜免费观看| 亚洲资源在线观看| 又爽又高潮的BB视频免费看| 污视频在线观看免费| 美女被爆羞羞网站在免费观看| 免费在线观看的黄色网址| 真实国产乱子伦精品免费| 十八禁的黄污污免费网站| 亚洲人和日本人jizz| 国产亚洲精品无码成人| 免费观看国产小粉嫩喷水| 性xxxxx免费视频播放| 国产无遮挡裸体免费视频在线观看| 亚洲乱码无码永久不卡在线| 午夜老司机免费视频| 1000部啪啪未满十八勿入免费| 亚洲一级片在线观看| 亚洲AV日韩AV天堂一区二区三区| 69xx免费观看视频| A片在线免费观看| 羞羞视频网站免费入口|