10
这可能是一个愚蠢的问题,显示出对JNI的理解不足。我正在编写封装Java VM的C++程序:我使用CallVoidMethod等调用在VM内调用函数。这纯属背景,与问题无关。JNI中jclass的类名称
我希望能够在给定jclass实例的情况下找到Java类的名称。有没有办法做到这一点?我可以像在Java程序中一样调用GetName函数吗?
这可能是一个愚蠢的问题,显示出对JNI的理解不足。我正在编写封装Java VM的C++程序:我使用CallVoidMethod等调用在VM内调用函数。这纯属背景,与问题无关。JNI中jclass的类名称
我希望能够在给定jclass实例的情况下找到Java类的名称。有没有办法做到这一点?我可以像在Java程序中一样调用GetName函数吗?
jclass实例是您的对象上的方法将被调用;您需要查找Class
类中的getName
方法ID,然后使用CallObjectMethod
在jclass
实例上调用它以获得jstring
结果。
所以总之是的,你只需调用GetName
函数并看看jstring
的结果。
编辑
(错误处理消隐)
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);
我很抱歉,但我的大脑刚开始吃自己时,它读取你的答案,由于这一问题的嵌套元的性质。你可能会展示一个简单的代码示例吗? – namuol 2013-04-03 06:38:26
看起来很有希望,但env-> ExceptionOccurred()为我调用GetMethodID后为true – JonnyBoy 2014-03-20 19:53:51
我认为这可能更接近寻求的答案:http://stackoverflow.com/questions/12719766/can-i-know-the这种类的名称,即调用一个jni-c方法 – Wheezil 2014-10-13 22:55:53