【发布时间】:2013-04-12 13:40:12
【问题描述】:
我想从 C 代码通过 JNI 层传递以下指针数组
char *result[MAXTEST][MAXRESPONSE] = {
{ "12", "12", "" },
{ "8", "3", "" },
{ "29", "70", "" },
{ "5", "2", "" },
{ "42", "42", "" }
};
在 java 代码中,我编写了以下声明
public static native String[][] getResult();
我很困惑如何将该数组通过 JNI 层传递给 Java 代码???以下是 JNI 层说明
JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult
(JNIEnv *env, jclass thiz) {
Confused over here ????
}
【问题讨论】:
-
虽然您可以这样做(您实际上必须创建多个 Java 对象,包括数组、作为数组元素的数组和字符串),但我建议您重新-认为您的接口改为返回单个数据块(可能是单个
byte缓冲区,字符串之间带有 NUL 终止符),并在必要时让 Java 端重新解释它。将 JNI 中的多维 C 数组转换为多维 Java 数组的一般复杂度比在 Java 端构造多维数组要高很多(假设你的 真的 需要那种格式) 来自更简单的数据。
标签: c arrays pointers java-native-interface char