我有一個像{"myname","yourname","hisname"}
字符串數組,我試圖發送此數組C與使用JNI。我找不到任何明確的解決方案。我試圖把這個字符串作爲chararray
,但沒有成功。傳遞字符串數組從Java到C與JNI
有沒有辦法做到這一點?
我有一個像{"myname","yourname","hisname"}
字符串數組,我試圖發送此數組C與使用JNI。我找不到任何明確的解決方案。我試圖把這個字符串作爲chararray
,但沒有成功。傳遞字符串數組從Java到C與JNI
有沒有辦法做到這一點?
您可以編寫一個簡單的函數,該函數需要一個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.
}
}
是的,有一種方法。您將從Java端將String[]
傳遞到您的本地方法中,並將以jobjectArray
的形式傳遞到C/C++端。然後,您將使用GetObjectArrayElement()
在給定索引處獲得jstring
,然後使用GetStringUTFChars()
或GetStringChars()
獲取指向底層字符串數據的C/C++指針。
如果您不知道,JNI Book是一個有價值的參考。
它可以在以下方式進行:
(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
}
'ReleaseStringUTFChars'如何? – 2014-07-10 10:01:40
記住使用
env->GetArrayLength(stringArray);
THX以供參考。我讀過它。我解決了將字符串發送到C端的問題。我嘗試發送陣列練習並取得成功。 Thx尋求幫助。有兩個正確的答案,如果你不介意,我想給代表8ball ... – Aykut 2011-06-13 10:42:39
「JNI書」的鏈接已損壞。 – 2016-12-20 09:20:18