Si vous avez examiné les documents et ont encore des questions qui devraient faire partie de votre question initiale. Dans ce cas, la fonction JNI dans l'exemple crée un nombre de tableaux. Le tableau externe est constitué d'un tableau 'Object' créant avec la fonction JNI NewObjectArray()
. Du point de vue de JNI, tout cela est un tableau à deux dimensions, un tableau d'objets contenant un certain nombre d'autres tableaux internes.
La boucle for suivante crée les tableaux internes de type int [] à l'aide de la fonction JNI NewIntArray()
. Si vous vouliez simplement retourner un tableau d'ints à une seule dimension, la fonction NewIntArray()
est ce que vous utiliseriez pour créer la valeur de retour. Si vous vouliez créer un tableau à une seule dimension de chaînes, vous utiliseriez la fonction NewObjectArray()
mais avec un paramètre différent pour la classe.
Puisque vous voulez retourner un tableau int, puis votre code va ressembler à quelque chose comme ceci:
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;
}
Oui, je l'ai fait déjà. J'avais du mal à comprendre l'exemple qui était lié à mon problème (le dernier), et je me demandais si quelqu'un m'infligerait d'expliquer un exemple plus simple en retournant juste un int []. – RyanCheu
EDIT: S'il vous plaît ignorer mon commentaire précédent, le code ci-dessus fonctionne. Merci beaucoup! C'était très utile. – RyanCheu
EDIT2: Le code fonctionne, mais vous devez changer tmp dans le SetIntArrayRegion (...) pour remplir. – RyanCheu