2014-10-07 10 views
5

Io chiamo un metodo Java da C++ tramite JNI. Il metodo Java restituisce un enum STATUS. Ho già le jobjects che rappresentano le enumerazioni nel mio codice C++, come qui: https://stackoverflow.com/a/17441151/3352197Confronto dei riferimenti oggetto JNI

jclass clSTATUS = env->FindClass("MyClass$STATUS"); 
jfieldID fidONE = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;"); 
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE); 

Quindi, la chiamata

jobject o = env->CallObjectMethod(jTestobject, test); 

restituisce un jobject che rappresenta uno stato enum, specialmente ONE. Quindi, come faccio a sapere quale enumerazione è stata restituita? Ho provato a confrontarlo con STATUS_ONE, ma non corrispondono.

+0

come hai confrontato 'o' con' STATUS_ONE'? – Samhain

+0

solo con ==, ma potrebbe essere falso? Ho anche stampato entrambi, ma hanno diversi puntatori (o così). – sosnet

+0

prova ad usare il metodo 'equals'. Non sono sicuro se 'env-> IsSameObject (o, STATUS_ONE)' lo chiami o meno – Samhain

risposta

6

L'ho trovato da solo, dopo che Samhain ha sottolineato il mio possibile errore. Basta confrontare correttamente gli oggetti:

env->IsSameObject(o, STATUS_ONE); 

Grazie!

Problemi correlati