0

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

char[] getResult()

如何从本机 C 代码调用此方法并将返回值转换为 C 字符数组?JNI 提供了一个CallCharMethod功能,但似乎没有提供CallCharArrayMethod或类似的功能。我是否必须将 getResult 的输出包装在字符串中并使用 CallObjectMethod?

4

2 回答 2

2

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

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

确保记住 will be 的正确描述getResult()[C

于 2012-09-09T05:56:24.963 回答
0

这很复杂,因为 Java char 类型和 C char 类型尽管名称相同,但非常不同。

Java char 类型表示 16 位 Unicode 字符。C 的 char 也用于表示一个字符,但由于 C 早于 Unicode,因此它被视为一个字节,而且我不知道 char 超过 8 位字节的任何 C 实现(尽管标准不禁止这)。

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

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

于 2012-09-09T05:59:58.783 回答