如何调用从本机代码返回char []的Java方法?

时间:2012-09-09 05:38:15

标签: java android android-ndk java-native-interface

我有一个带有以下签名的Java函数:

char[] getResult()

如何从本机C代码调用此方法并将返回值转换为C字符数组? JNI提供CallCharMethod函数,但似乎不提供CallCharArrayMethod等。我是否必须将getResult的输出包装在String中并使用CallObjectMethod?

2 个答案:

答案 0 :(得分:2)

使用CallObjectMethod;每个数组类型都是一个对象类型: - )

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

请务必记住getResult的正确描述符()[C

答案 1 :(得分:0)

尽管Java char类型和C char类型具有相同的名称,但由于它们的名称非常不同而变得复杂。

Java char类型表示16位Unicode字符。 C的char也意味着代表一个字符,但由于C早于Unicode,这被视为一个字节,我不知道任何C实现,其中char超过8位字节(虽然标准不禁止这一点)。

因此,就将Java字符数组转换为C字符数组而言,您可能需要处理一些编码问题。如果您的Unicode字符不适合16位,那就更复杂了。

但是对于调用方法,JNI提供了调用返回基本类型的方法的函数和对象的方法,而在Java中,数组是对象,所以你想要使用CallObjectMethod