標籤:
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