2012-02-13 19 views
10

Questa è probabilmente una domanda stupida che rivela una mancanza di comprensione di JNI. Sto scrivendo un programma C++ che incapsula la Java VM: sto chiamando le funzioni all'interno della VM usando chiamate come CallVoidMethod. Questo è puramente di sfondo e non molto pertinente alla domanda.Nome classe da jclass in JNI

Mi piacerebbe essere in grado di trovare il nome della classe Java data un'istanza di jclass. C'è un modo per fare questo? Potrei semplicemente chiamare la funzione GetName, come farei in un programma Java?

risposta

12

L'istanza jclass è l'oggetto su cui verrà invocato un metodo; dovrai cercare l'ID metodo getName nella classe Class, quindi richiamarlo nell'istanza jclass utilizzando CallObjectMethod per ottenere un risultato jstring.

Quindi in breve sì, basta chiamare la funzione GetName e osservare il risultato jstring.

EDIT

(gestione degli errori eliso)

JNIENV* env = ...; 
// substitute your desired class's specifier for "java/lang/Class"... 
jclass cls = (*env)->FindClass("java/lang/Class"); 
MethodID mid_getName = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); 
jstring name = (*env)->CallObjectMethod(env, cls, mid_getName); 
+0

Mi dispiace, ma il mio cervello appena iniziato a mangiare se stesso quando ha letto la tua risposta a causa della natura nested-meta di questa domanda. Potresti mostrare un semplice esempio di codice? – namuol

+0

Sembra promettente, ma env-> ExceptionOccurred() è true dopo aver chiamato GetMethodID per me – JonnyBoy

+0

Penso che questo potrebbe essere più vicino alla risposta ricercata: http://stackoverflow.com/questions/12719766/can-i-know-the -name-of-the-class-that-calls-a-jni-c-metodo – Wheezil

Problemi correlati