Je code quelque chose en utilisant l'API JNI Invocation. Un programme C démarre une JVM et y effectue des appels. Le pointeur JNIenv est global dans le fichier C. J'ai de nombreuses fonctions C qui doivent effectuer la même opération sur une classe donnée de jobject. J'ai donc écrit des fonctions d'aide qui prennent un jobject et le traitent, renvoyant les données nécessaires (un type de données C ... par exemple, une valeur d'état int). Est-il sûr d'écrire des fonctions d'assistance C et de leur passer des jobjects comme arguments?Sécuritaire pour passer des objets aux fonctions C lorsque vous travaillez dans l'API JNI Invocation?
dire (un exemple simple - conçu pour illustrer la question):
int getStatusValue(jobject jStatus)
{
return (*jenv)->CallIntMethod(jenv,jStatus,statusMethod);
}
int function1()
{
int status;
jobject aObj = (*jenv)->NewObject
(jenv,
aDefinedClass,
aDefinedCtor);
jobject j = (*jenv)->CallObjectMethod
(jenv,
aObj,
aDefinedObjGetMethod)
status = getStatusValue(j);
(*jenv)->DeleteLocalRef(jenv,aObj);
(*jenv)->DeleteLocalRef(jenv,j);
return status;
}
Merci.
J'utilise l'API JNI de C. Invocation Le flux logique est comme ceci: 0. Démarrez JVM en C. 1. Faire un appel de C en Java 2. résultats Manipulez retour de Java. 3. Libérer les références locales. 4. Arrêtez la machine virtuelle Java. Les étapes 1 à 3 peuvent se produire N nombre de fois entre le démarrage et l'arrêt de la JVM. J'ai fait quelques tests et ça semble être OK. La documentation m'a fait peur de passer ces références locales autour ... – bubbadoughball