इस related question में, मैंने ध्यान दिया कि विजुअल स्टूडियो का डीबगर System.__ComObject
संदर्भों के गुणों को गिनने में सक्षम है, जो "एक छिपी हुई प्रकार है जब रैपर प्रकार अस्पष्ट है" - उदाहरण के लिए, जब आप इसे प्राप्त करते हैं तो ऑब्जेक्ट का प्रकार मिलता है एक और COM ऑब्जेक्ट से और यह अपने आप का दृष्टांत नहीं है: इसके अतिरिक्तविजुअल स्टूडियो की डीबगर/इंटरैक्टिव विंडो .NET में COM ऑब्जेक्ट्स के गुणों को कैसे डंप करती है?
, अगर आप बस तत्काल विंडो में कोई COM ऑब्जेक्ट के पहचानकर्ता लिखते हैं, उसके गुण और मूल्यों इसी तरह फेंक दिया जाता है:
ध्यान दें कि यह वीएस -2010 के "Dynamic View" से अलग है, जो मुझे लगता है कि IDispatch
और पीआईए और .NET प्रतिबिंब के उपयोग के बिना COM ऑब्जेक्ट्स के गुणों का आकलन करने के लिए COM प्रतिबिंब का उपयोग करता है। वस्तुओं के साथ मैं काम कर रहा हूँ कर नहीं लागू IDispatch
(और न ही वे उस बात के लिए IProvideClassInfo
लागू करते हैं), और जैसे, "गतिशील दृश्य" नहीं उनके बारे में कोई जानकारी प्राप्त करने में सक्षम है:
दिलचस्प बात यह है कि SharpDevelop का डीबगर System.__Comobject
एस (उदाहरण के लिए point.Envelope
) के सदस्यों को सूचीबद्ध करने में सक्षम नहीं है, केवल दृढ़ता से टाइप किए गए आरसीडब्ल्यू (उदाहरण के लिए point
)।
तो कैसे दृश्य स्टूडियो यह करने में सक्षम है?
मुझे इस मामले में विश्वास है, ऐसा इसलिए है क्योंकि प्राथमिक इंटरऑप असेंबली इन वस्तुओं द्वारा समर्थित इंटरफेस के लिए परिभाषाओं के साथ मौजूद हैं, और विजुअल स्टूडियो संभावित इंटरफेस और गुणों को गिनने के लिए प्रतिबिंब का उपयोग कर रहा है। क्या यह सही है? और यदि हां, तो यह कैसे काम करता है?
शुरुआत के लिए, यह पीआईए तक कैसे पहुंचता है? क्या यह केवल वर्तमान में लोड किए गए पीआईए को देखता है या क्या यह गतिशील रूप से उन्हें लोड करता है (और यदि ऐसा है, तो कैसे)? यह कैसे निर्धारित करता है कि किस इंटरफ़ेस, जिसमें से कई गुण हो सकते हैं, के गुणों का आकलन करने के लिए? यह केवल एक का उपयोग करता प्रतीत होता है, और जरूरी नहीं कि पहले। एपीआई के documentation से मैं (आर्कऑब्जेक्ट्स) के साथ काम कर रहा हूं, इन ऑब्जेक्ट्स के लिए डिफ़ॉल्ट इंटरफ़ेस IUnknown
है, इसलिए यह केवल डिफ़ॉल्ट इंटरफ़ेस का उपयोग नहीं कर रहा है।
स्क्रीनशॉट में उदाहरण में, यह इंटरफ़ेस IEnvelope
इंटरफ़ेस का सदस्य है, जो IGeometry
इंटरफ़ेस से प्राप्त होता है। VS2010 कैसे IGeometry
के सदस्यों की गणना करने के लिए नहीं जानता है, जो मेरे परीक्षण में पहले दिखाई देता है यदि आप केवल पीआईए में सभी इंटरफ़ेस प्रकारों का आकलन करते हैं? कुछ बहुत चालाक चल रहा है या शायद मुझे कुछ याद आ रही है?
कारण मैं पूछ रहा हूं कि LINQPadappears willing के डेवलपर को समान कार्यक्षमता लागू करने के लिए यदि वह जानता था कि वीएस कैसे करता है। तो यहां एक अच्छा जवाब उस लोकप्रिय उपकरण को बेहतर बनाने में मदद करने के लिए एक लंबा रास्ता तय कर सकता है।
चूंकि प्वाइंट क्लास की लिफाफा संपत्ति के प्रकार को पीआईए में आईनेफाफे के रूप में परिभाषित किया गया है, वीएस इसे डंप करने में सक्षम है, विशेष तंत्र की आवश्यकता नहीं है। –
हम्म यह वास्तव में इतना आसान है? क्या यह जानकारी केवल डीबग समय पर उपलब्ध है? (कैसे) एक ही जानकारी रनटाइम पर प्राप्त की जा सकती है? और क्यों SharpDevelop के डीबगर एक ही नहीं करते हैं (शायद वे सिर्फ परवाह नहीं करते हैं)। – blah238
हां यह बहुत आसान है। यह अधिक जटिल है जब आपके पास केवल System._ComObject है, लेकिन जब आप उन्हें ComImport .NET इंटरफेस के रूप में डाल सकते हैं, तो आपके पास इन इंटरफेस लेआउट तक पहुंच है। यह इंटेलिजेंस समेत हर समय उपलब्ध है। मैं तीव्र विकास के बारे में नहीं जानता। –