2012-02-13 17 views
10

में jclass से कक्षा का नाम यह शायद एक कठिन सवाल है जो जेएनआई की समझ की कमी का खुलासा करता है। मैं एक सी ++ प्रोग्राम लिख रहा हूं जो जावा वीएम को समाहित करता है: मैं CallVoidMethod जैसे कॉल का उपयोग करके वीएम के भीतर फ़ंक्शन कॉल कर रहा हूं। यह पूरी तरह से पृष्ठभूमि है और सवाल के लिए बहुत प्रासंगिक नहीं है।जेएनआई

मैं जावा क्लास का नाम jclass उदाहरण दिए जाने में सक्षम होना चाहता हूं। क्या इसे करने का कोई तरीका है? क्या मैं सिर्फ GetName फ़ंक्शन को कॉल कर सकता हूं, जैसा कि मैं जावा प्रोग्राम में करता हूं?

उत्तर

12

जेक्लास उदाहरण आपकी ऑब्जेक्ट है जिस पर एक विधि लागू की जाएगी; आपको Class क्लास पर getName विधि आईडी देखने की आवश्यकता होगी, फिर परिणाम प्राप्त करने के लिए CallObjectMethod का उपयोग करके इसे jclass इंस्टेंस पर आज़माएं।

तो संक्षेप में, आप बस GetName फ़ंक्शन पर कॉल करें और jstring परिणाम देखें।

संपादित

(त्रुटि हैंडलिंग elided)

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

+0

आशाजनक लग रहा है, लेकिन env-> ExceptionOccurred() मेरे लिए GetMethodID को कॉल करने के बाद सच है – JonnyBoy

+0

मुझे लगता है कि यह मांगे गए उत्तर के करीब हो सकता है: http://stackoverflow.com/questions/12719766/can-i-now-the -नाम-ऑफ-द-क्लास-द-कॉल-ए-जेनी-सी-विधि – Wheezil

संबंधित मुद्दे