Pour le code suivant de création d'un tableau int pour java à partir de jni, Pourquoi avons-nous besoin de créer un tableau temp [], pourquoi ne pouvons-nous pas remplir le résultat [] array et le renvoie au java. Est-ce parce que java et jni doivent utiliser un espace mémoire différent donc deux pointeurs différents? Si oui, quel est le but de cela? Mercipourquoi avoir besoin de créer un tableau temporaire pour retourner un tableau de jni à java
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 temp[256];
for (i = 0; i < size; i++) {
temp[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, temp);
return result;
}
dans votre exemple, qu'est-ce que ENV-> GetIntArrayElements (entrée, NULL) exactement le rendement? l'adresse de l'entrée dans la mémoire? Si oui, l'inputArray et l'entrée doivent être exactement le même élément? – henryyao
Il y avait une faute de frappe dans cette méthode mais je l'ai corrigé. Ce qu'il renvoie, est un pointeur vers l'élément de tableau (ou null si échoue). Le 'input', stockez le pointeur sur' inputArray', en utilisant 'GetIntArrayElements', vous pouvez obtenir ce pointeur ou créer une copie en fonction du dernier paramètre (true/false). Ce n'est pas le même pointeur que 'input'. –