JNI传递的char *二维数组JAVA code [英] JNI Pass Char* 2D array to JAVA Code

查看:130
本文介绍了JNI传递的char *二维数组JAVA code的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过从JNI层通过下列指针列C code

 的char *结果[MAXTEST] [MAXRESPONSE] = {
    {12,12,},
    {8,3,},
    {29,70,},
    {5,2,},
    {42,42,}
};

在Java的code我写了下面的声明

 公共静态本地字符串[] []的getResult();

我很困惑如何通过JNI层到Java code数组?以下是JNI层描述

  JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult
  (JNIEnv的* ENV,JCLASS THIZ){
困惑在这里????
}


解决方案

后,终于在JOP的工作时间共享<一个href=\"http://stackoverflow.com/questions/6070679/create-populate-and-return-2d-string-array-from-native-$c$c-jni-ndk\">link,我可以解决我的问题。在code云如下:

  JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult(JNIEnv的* ENV,JCLASS THIZ){
    jboolean标志= JNI_TRUE;
    JCLASS stringClass =(* ENV) - GT;的findClass(ENV,爪哇/郎/字符串);
    jobjectArray排;
    jobjectArray行;    jsize I,J;
    对于(I = 0; I&小于5;我++){
        行=(* ENV) - GT; NewObjectArray(ENV,MAXRESPONSE,stringClass,0);
        为(J = 0; J&下; 3; J ++){
            (* ENV) - GT; SetObjectArrayElement(ENV,行,J,(* ENV) - GT; NewStringUTF(ENV,userResponse [I] [J]));
        }        如果(标志== JNI_TRUE){
            标志= JNI_FALSE;
            行=(* ENV) - &GT; NewObjectArray(ENV,MAXTEST,(* ENV) - &GT; GetObjectClass(ENV,行),0);
        }        (* ENV) - GT; SetObjectArrayElement(ENV,行,我行);
    }    返回行;
}

I want to pass the following pointer array through the JNI layer from C code

char *result[MAXTEST][MAXRESPONSE] = {
    { "12", "12", "" },
    { "8",  "3",  "" },
    { "29", "70", "" },
    { "5",  "2",  "" },      
    { "42", "42", "" }
};

In java code I have written the following declaration

public static native String[][] getResult();

I am confused how to pass that array through JNI layer to Java code??? Following is the JNI layer description

JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult
  (JNIEnv *env, jclass thiz) {
Confused over here ????
}

解决方案

Finally after hours working on jop's shared link, I could solve my problem. The code goes as below:

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;
}

这篇关于JNI传递的char *二维数组JAVA code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆