2011-05-12 185 views
25

我有一個像{"myname","yourname","hisname"}字符串數組,我試圖發送此數組C與使用JNI。我找不到任何明確的解決方案。我試圖把這個字符串作爲chararray,但沒有成功。傳遞字符串數組從Java到C與JNI

有沒有辦法做到這一點?

回答

68

您可以編寫一個簡單的函數,該函數需要一個jobjectArray對象,將每個對象轉換爲jstring,然後調用GetStringUTFChars

像這樣:

void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) { 

    int stringCount = env->GetArrayLength(stringArray); 

    for (int i=0; i<stringCount; i++) { 
     jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i)); 
     const char *rawString = env->GetStringUTFChars(string, 0); 
     // Don't forget to call `ReleaseStringUTFChars` when you're done. 
    } 
} 
9

是的,有一種方法。您將從Java端將String[]傳遞到您的本地方法中,並將以jobjectArray的形式傳遞到C/C++端。然後,您將使用GetObjectArrayElement()在給定索引處獲得jstring,然後使用GetStringUTFChars()GetStringChars()獲取指向底層字符串數據的C/C++指針。

如果您不知道,JNI Book是一個有價值的參考。

+1

THX以供參考。我讀過它。我解決了將字符串發送到C端的問題。我嘗試發送陣列練習並取得成功。 Thx尋求幫助。有兩個正確的答案,如果你不介意,我想給代表8ball ... – Aykut 2011-06-13 10:42:39

+2

「JNI書」的鏈接已損壞。 – 2016-12-20 09:20:18

1

它可以在以下方式進行:

(JNIEnv *env, jobject object, jobjectArray prdctini) 
    { 
     const char *param[20]; 
     jsize stringCount = (*env).GetArrayLength(prdctini); 

      for (int i=0; i<stringCount; i++) { 
        jstring string = (jstring) (*env).GetObjectArrayElement(prdctini, i); 
        param[i] = (*env).GetStringUTFChars(string, NULL); 
      } 
      cout<<"U_Id="<<param[0]<<endl; 
      cout<<"aggregation="<<param[1]<<endl 
} 
+4

'ReleaseStringUTFChars'如何? – 2014-07-10 10:01:40

0

記住使用

env->GetArrayLength(stringArray); 
相關問題