2012-02-13 6 views
10

Esta es probablemente una pregunta tonta que revela una falta de comprensión de JNI. Estoy escribiendo un programa en C++ que encapsula la máquina virtual Java: llamo a funciones dentro de la máquina virtual utilizando llamadas como CallVoidMethod. Eso es puramente de fondo y no muy relevante para la pregunta.Nombre de clase de jclass en JNI

Me gustaría poder encontrar el nombre de la clase Java dada una instancia de jclass. ¿Hay alguna manera de hacer esto? ¿Podría simplemente llamar a la función GetName, como lo haría en un programa Java?

Respuesta

12

La instancia de jclass es su objeto sobre el que se invocará un método; Deberá buscar el ID del método getName en la clase Class, luego invocarlo en la instancia jclass usando CallObjectMethod para obtener un resultado de jstring.

En resumen, sí, simplemente llame a la función GetName y mire el resultado jstring.

EDITAR

(control de errores elidido)

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

Lo siento, pero mi cerebro simplemente empecé a comer a sí misma cuando leyó su respuesta debido a la naturaleza anidada-meta de esta pregunta. ¿Podría mostrar un simple ejemplo de código? – namuol

+0

Parece prometedor, pero env-> ExceptionOccurred() es verdadero después de llamar a GetMethodID para mí – JonnyBoy

+0

Creo que esto puede estar más cerca de la respuesta buscada: http://stackoverflow.com/questions/12719766/can-i-know-the -name-of-the-class-that-calls-a-jni-c-method – Wheezil

Cuestiones relacionadas