Название класса из jclass в JNI

Это, наверное, глупый вопрос, который показывает отсутствие понимания JNI. Я пишу программу на С++, которая инкапсулирует виртуальную машину Java: я вызываю функции внутри виртуальной машины, используя такие вызовы, как CallVoidMethod. Это чисто предпосылка и не очень актуально для вопроса.

Я хотел бы найти имя класса Java, заданного экземпляром jclass. Есть какой-либо способ сделать это? Могу ли я просто вызвать функцию GetName, как в программе Java?

Ответ 1

Экземпляр jclass - это ваш объект, для которого будет вызван метод; Вы должны смотреть вверх getName идентификатор метода на Class класса, а затем вызвать его на jclass например, с использованием CallObjectMethod для получения jstring результата.

Короче говоря, да, вы просто вызываете функцию getName и смотрите на результат jstring.

РЕДАКТИРОВАТЬ

(обработка ошибок исключена)

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