Si ha examinado la documentación y todavía tiene preguntas que deben ser parte de su pregunta inicial. En este caso, la función JNI en el ejemplo crea un número de matrices. La matriz externa se compone de una matriz 'Objeto' que crea con la función JNI NewObjectArray()
. Desde la perspectiva de JNI, eso es todo una matriz bidimensional, una matriz de objetos que contiene una serie de otras matrices internas.
La siguiente bucle for crea las matrices interiores que son de tipo int [] utilizando la función JNI NewIntArray()
. Si sólo quería devolver una matriz unidimensional de enteros, entonces la función NewIntArray()
es lo que se utiliza para crear el valor de retorno. Si desea crear una matriz unidimensional de Cuerdas continuación, tendrá que utilizar la función NewObjectArray()
pero con un parámetro diferente para la clase.
Puesto que usted quiere devolver una matriz int, a continuación, el código va a ser algo como esto:
JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size)
{
jintArray result;
result = (*env)->NewIntArray(env, size);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
int i;
// fill a temp structure to use to populate the java int array
jint fill[size];
for (i = 0; i < size; i++) {
fill[i] = 0; // put whatever logic you want to populate the values here.
}
// move from the temp structure to the java structure
(*env)->SetIntArrayRegion(env, result, 0, size, fill);
return result;
}
Sí, lo hice que ya. Estaba teniendo problemas para entender el ejemplo que estaba relacionado con mi problema (el último), y me preguntaba si a alguien le importaría explicar un ejemplo más simple con solo devolver un int []. – RyanCheu
EDITAR: ignora mi comentario anterior, el código anterior funciona. ¡Gracias! Eso fue muy útil. – RyanCheu
Edit2: El código funciona, pero hay que cambiar tmp en el SetIntArrayRegion (...) a llenar. – RyanCheu