2012-09-09 46 views
0

我有以下簽名的Java函數:如何調用從本機代碼返回char []的Java方法?

char[] getResult() 

如何調用來自本機C代碼此方法的返回值轉換爲C字符數組? JNI提供了一個CallCharMethod函數,但似乎沒有提供CallCharArrayMethod等。我是否必須將getResult的輸出封裝到String中並使用CallObjectMethod?

+0

可能有用:http://stackoverflow.com/questions/8624153/can-i-call-java-method-from-native-codeif-so-how –

回答

0

這是一個事實,即Java的char類型以及C char類型,儘管具有相同的名稱,有很大的不同複雜。

Java的char類型代表的16位Unicode字符。 C的字符也意味着代表一個字符,但由於C早於Unicode,因此它被視爲一個字節,並且我不知道任何C實現,其中char超過8位字節(儘管標準不禁止這個)。

所以,你可能有一些編碼問題來處理,只要Java的字符數組轉換到C字符數組去。如果您的Unicode字符不符合16位,則更爲複雜。

但是至於調用方法,JNI提供的函數調用返回原始類型的方法和對象的方法,在Java中,數組是對象,所以你想使用CallObjectMethod

+1

好一點。我忽略了他想把'jcharArray'作爲C'char's的事實。 PS'char'不代表UTF-16字符,而代表*代碼單元*,它足以表示BMP中的字符。 – oldrinb

2

使用CallObjectMethod;每一個數組類型是對象類型:-)

JNIEnv *env = ...; 
jobject inst = ...; 
jmethodID getResult_id = ...; 
jcharArray array = (*env)->CallObjectMethod(env, inst, getResult_id); 

請務必記住getResult正確的描述是()[C

相關問題