Je suis coincé avec cela, j'ai besoin d'appeler une fonction Java de c/C++. Dans les exemples et les didacticiels, je ne vois qu'une application java appelant une méthode c, et dans cette même méthode appelant une autre méthode java, mais ce que je veux faire est d'appeler une méthode java à partir de n'importe quelle partie du code. Voilà ce que j'ai:Comment appeler la fonction Java de c
static JNIEnv mEnv;
static jclass mClassAndroidActivity;
static mMethodSayHello;
JNIEXPORT void JNICALL JNI_FUNCTION(AndroidActivity_nativeInit)(JNIEnv* env, jobject obj, int width, int height)
{
mEnv = env;
jclass cls = (*env)->GetObjectClass(env, obj);
mClassAndroidActivity = (*env)->NewGlobalRef(env, cls);
mMethodSayHello = (*env)->GetMethodID (env, mClassAndroidActivity, "SayHello", "(Ljava/lang/String;)V");
}
//this method is called from a cpp
void nativeSayHello(char* msg)
{
jstring string = (*mEnv)->NewStringUTF(mEnv, msg);
(*mEnv)->CallVoidMethod(mEnv, mClassAndroidActivity, mMethodSayHello, string);
}
mais est toujours écraser, je l'ai essayé sans NewGlobalRef, en utilisant MENV au lieu d'env dans le JNI_Function, j'ai essayé d'obtenir l'identifiant de la méthode du JNI_OnLoad, mais se bloque toujours .
C'est le journal que je reçois:
02-15 18: 09: 48,520: W/dalvikvm (27904): JNI AVERTISSEMENT: threadid = 1 en utilisant env de threadid = 0
'Le "meilleur" journal que je reçois dit que env du fil 1 était différent du fil 0' C'est correct, je crois. Vous devriez avoir un pointeur env différent par thread Java. – Yourpalal
ouais mais comment puis-je enregistrer le premier pointeur env donc je peux utilisé dans différents threads –