JNI将Char * 2D数组传递给JAVA代码

时间:2013-04-12 13:40:13

标签: c arrays pointers java-native-interface char

我想通过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 ????
}

1 个答案:

答案 0 :(得分:1)

最后在jop的共享link上工作了几个小时后,我可以解决我的问题。代码如下:

JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult(JNIEnv *env, jclass thiz) {
    jboolean flag = JNI_TRUE;
    jclass stringClass = (*env)->FindClass(env, "java/lang/String");
    jobjectArray row;
    jobjectArray rows;

    jsize i, j;
    for(i=0; i<5; i++) {
        row = (*env)->NewObjectArray(env, MAXRESPONSE, stringClass, 0);
        for(j=0; j<3; j++) {
            (*env)->SetObjectArrayElement(env, row, j, (*env)->NewStringUTF(env, userResponse[i][j]));
        }

        if(flag == JNI_TRUE) {
            flag = JNI_FALSE;
            rows = (*env)->NewObjectArray(env, MAXTEST, (*env)->GetObjectClass(env, row), 0);
        }

        (*env)->SetObjectArrayElement(env, rows, i, row);
    }

    return rows;
}