java使用jni

來源:互聯網
上載者:User

標籤:

Java調用c++的核心是變數類型的轉換,java的int與c++中的int是一樣的,轉換比較簡單。而想java中的String,處理就複雜一些。

JNIEXPORT jstring JNICALL Java_com_dd_lib_ChineseToPinyin (JNIEnv *env, jclass, jstring src_jstr)

{

    //盡量不要使用char *a = new char[100];這樣的聲明,可能導致各種libc.so.6的錯誤,盡量讓所有記憶體都由系統回收。

    /*開始時使用new和delete管理記憶體,出現過 C  [libc.so.6+0x7a5db]  unsigned long+0xa5b, C  [libc.so.6+0x1e9e0]  [email protected]@GLIBC_PRIVATE+0x1e9e0等等錯誤,錯誤提示只能精確到函數,應該是記憶體上的錯誤,所以使用java調用c/c++的話盡量還是讓系統來管理記憶體。*/

    char src_nc[SRCLEN];

 

    try{

        //把java的string轉換為c++的string,這裡的src_char是指向src_jstr中位元組數組的指標

        const char * src_char = env->GetStringUTFChars(src_jstr, false);

        strcpy(src_nc,src_char);

        //把字串取出後要釋放src_jstr

        env->ReleaseStringUTFChars(src_jstr, src_char);

    } catch(exception &e){

        cout << e.what() << endl;

    }

    .....................

    string ret_str = "return value";

    //返回時需要轉換為java的字串

    jstring rtstr = env->NewStringUTF(ret_str.c_str());

    return rtstr;

}

java使用jni

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.