2011-04-18 54 views
2

您好我想要將字符串從jni傳遞給java到android-ndk中的java。 假設這是我的本地功能。如何在函數參數中將char字符串的值傳遞給java字符串(JNI到Java)?

private native int myFunc(String buffer); 

這是我在JNI本機功能:

jint Java_com_example_twolibs_myFunc(JNIEnv* env, jobject thiz, jstring buffString){ 
    //I want to pass a character array to buffString from here, that I would read from java as String. 
return 0; 
} 

怎麼辦呢?

+0

我不認爲你可以做到這一點 - 重新分配一個新的值作爲參數傳遞給對象。我會創建新的字符串對象並將其返回。 – 2012-09-21 11:16:46

回答

2

我無法完全解析這個問題。傳遞一個字符串「從Java到Java的Java」聽起來多餘。

如果您只想從本地代碼獲取String的內容,則可以使用JNI GetStringUTFChars來獲取UTF-8表示形式。字符串是不可變的,不能直接修改。你可以用NewStringUTF從本地創建一個新的String。

請注意,傳遞給NewStringUTF的字符串數據必須爲「修改的UTF-8」形式。請參閱JNI文檔以獲取對此含義的解釋。

如果您只想傳遞字符,您可能需要使用char []緩衝區(GetCharArrayElements,ReleaseCharArrayElements)。請注意,Java語言字符是UTF-16,因此「jchar」是一個無符號的16位值(不要試圖將它們視爲C++ 8位「char」)。

+0

我想調用result = myFunc(testString),其中testString將包含從jni傳遞的值。 注意:我在Java中創建了testString並傳遞給本地函數。 GetStringUTFChars用於從jstring中獲取值,但是如何將該值設置爲本地函數中的jstring緩衝區? – StarDust 2011-04-20 04:43:38

+0

Java語言字符串是不可變的。你不能從JNI重寫它們。你可以使用NewStringUTF來創建一個新的字符串,然後從你的JNI方法中返回(它需要返回jstring而不是jint)。 – fadden 2011-04-20 17:45:32

相關問題