2014-10-07 5 views
5

मैं जेएनआई के माध्यम से सी ++ से जावा विधि को कॉल करता हूं। जावा विधि एक enum स्थिति देता है। https://stackoverflow.com/a/17441151/3352197जेएनआई ऑब्जेक्ट संदर्भों की तुलना

jclass clSTATUS = env->FindClass("MyClass$STATUS"); 
jfieldID fidONE = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;"); 
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE); 

तो, कॉल

jobject o = env->CallObjectMethod(jTestobject, test); 

एक jobject एक enum स्थिति का प्रतिनिधित्व करने, विशेष रूप से एक देता है: मैं पहले से ही jobjects यहाँ की तरह मेरे C++ कोड में enums का प्रतिनिधित्व किया है। तो, मुझे कैसे पता चलेगा कि यह कौन सा enum वापस आ गया है? मैंने इसे STATUS_ONE से तुलना करने की कोशिश की, लेकिन वे मेल नहीं खाते।

+0

आपने 'STATUS_ONE' के साथ 'o' की तुलना कैसे की? – Samhain

+0

बस == के साथ, लेकिन यह गलत हो सकता है? मैंने दोनों को भी मुद्रित किया, लेकिन उनके पास अलग-अलग पॉइंटर्स हैं (या तो)। – sosnet

+0

'बराबर' विधि का उपयोग करने का प्रयास करें। सुनिश्चित नहीं है कि 'env-> IsSameObject (o, STATUS_ONE) 'कॉल करता है या नहीं – Samhain

उत्तर

6

समनैन ने मेरी संभावित गलती को इंगित करने के बाद इसे स्वयं पाया। तुम सिर्फ वस्तुओं को सही ढंग से तुलना करने के लिए है:

env->IsSameObject(o, STATUS_ONE); 

धन्यवाद!

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