2012-09-09 63 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

相关问题