<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 相關技術
    主站蜘蛛池模板: 亚洲午夜理论片在线观看| 亚洲国产成人久久综合碰碰动漫3d| 亚洲精品mv在线观看| 亚洲精品一级无码鲁丝片| 亚洲精品动漫免费二区| 成人毛片免费视频| 亚洲色精品三区二区一区| 成人性生交大片免费看午夜a| 亚洲永久在线观看| 嫩草影院在线免费观看| 久久久久亚洲AV无码去区首| 免费一级毛片不卡不收费| 久久精品国产亚洲av成人| 精品视频在线免费观看| 久久精品国产亚洲AV麻豆网站| 最近2019年免费中文字幕高清| 亚洲精品高清国产麻豆专区| 久久久高清免费视频| 亚洲综合av一区二区三区不卡 | 久久亚洲精品国产精品| 131美女爱做免费毛片| 国产精品亚洲专区在线观看 | 精品久久久久久久免费人妻| 亚洲av无码一区二区三区网站 | 亚洲成aⅴ人片久青草影院| a一级爱做片免费| 国产美女被遭强高潮免费网站 | 99在线免费观看| 精品无码一区二区三区亚洲桃色| 永久免费的网站在线观看| 国产AV日韩A∨亚洲AV电影| 亚洲视频人成在线播放| 免费A级毛片在线播放| 亚洲熟妇av午夜无码不卡| 中文字幕中韩乱码亚洲大片| 自拍偷自拍亚洲精品偷一| 亚洲精品A在线观看| 永久看日本大片免费35分钟| 国产成人亚洲精品无码AV大片| 亚洲av中文无码乱人伦在线r▽ | 在线观看永久免费|