convertir une carte c ++ en jobject JNI?

Je souhaite transférer une carte C ++ vers Java et je ne sais pas comment définir le paramètre de retour pour que la méthode fonctionne. Je n’ai eu aucun problème avec ssortingng ou int comme parameters de retour, mais je ne peux pas faire fonctionner la carte.
Ma méthode Java ressemble à ceci:

private native Map sayHello(); 

Mon code C ++ est:

 #include  #include "stdafx.h" #include "jni.h" #include "HelloJNI.h" #include  #include  #include  #include  using namespace std; JNIEXPORT jobject JNICALL Java_HelloJNI_sayHello (JNIEnv *, jobject) { map mMap; mMap["1"] = "Ladi"; mMap["2"] = "Dida"; return mMap; } 

Et bien sûr, je reçois une erreur en me disant que je dois convertir mMap en jobject en quelque sorte. Mais je ne sais pas comment faire cela.

J’espère que ce ne sera pas un double post, je viens de trouver quelques questions concernant la transmission de listes.

Merci d’avance.

Vous devez utiliser jni api pour trouver la classe java HashMap , puis ses méthodes de construction et d’insertion d’éléments. Ajoutez ensuite tous les éléments et renvoyez finalement cette carte. Il devrait ressembler à ceci (avertissement – pseudocode !!!)

 env->PushLocalFrame(256); // fix for local references jclass hashMapClass= env->FindClass(env, "java/util/HashMap"); jmethodID hashMapInit = env->GetMethodID(env, hashMapClass, "", "(I)V"); jobject hashMapObj = env->NewObject(env, hashMapClass, hashMapInit, mMap.size()); jmethodID hashMapOut = env->GetMethodID(env, hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); for (auto it : mMap) { env->CallObjectMethod(env, hashMap, put, env->NewSsortingngUTF(it->first.c_str()), env->NewSsortingngUTF(it->second.c_str())); } env->PopLocalFrame(hashMap); return hashMap; 

ps. Je code habituellement jni sous Android, mais le code ci-dessus devrait fonctionner de la même manière sous d’autres plateformes.