2012-02-13 34 views
10

這可能是一個愚蠢的問題,顯示出對JNI的理解不足。我正在編寫封裝Java VM的C++程序:我使用CallVoidMethod等調用在VM內調用函數。這純屬背景,與問題無關。JNI中jclass的類名稱

我希望能夠在給定jclass實例的情況下找到Java類的名稱。有沒有辦法做到這一點?我可以像在Java程序中一樣調用GetName函數嗎?

回答

12

jclass實例是您的對象上的方法將被調用;您需要查找Class類中的getName方法ID,然後使用CallObjectMethodjclass實例上調用它以獲得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); 
+0

我很抱歉,但我的大腦剛開始吃自己時,它讀取你的答案,由於這一問題的嵌套元的性質。你可能會展示一個簡單的代碼示例嗎? – namuol 2013-04-03 06:38:26

+0

看起來很有希望,但env-> ExceptionOccurred()爲我調用GetMethodID後爲true – JonnyBoy 2014-03-20 19:53:51

+0

我認爲這可能更接近尋求的答案:http://stackoverflow.com/questions/12719766/can-i-know-the這種類的名稱,即調用一個jni-c方法 – Wheezil 2014-10-13 22:55:53