Имя класса из jclass в JNI - PullRequest
       3

Имя класса из jclass в JNI

11 голосов
/ 13 февраля 2012

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

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

1 Ответ

12 голосов
/ 14 февраля 2012

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

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

EDIT

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

JNIEnv* env = ...;
// substitute your desired class's 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...