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