2009-10-28 5 views
5

हमारे कोड की समीक्षा करने के लिए मुझे .idl फ़ाइलों में से एक में एक जिज्ञासु परिभाषा मिली है:आईडीएन में दोहरी के रूप में एक अज्ञात व्युत्पन्न इंटरफेस को चिह्नित करने में कोई समझ है?

[ 
    object, 
    uuid(uuidhere), 
    dual, 
    nonextensible, 
    oleautomation, 
    hidden 
] 
interface IOurInterface : IUnknown { 
    //methods here 
}; 

IUnknown से सीधे प्राप्त इंटरफ़ेस कैसे एक दोहरी इंटरफ़ेस हो सकता है? यदि मैं dual विशेषता को हटा देता हूं तो क्या कुछ तोड़ देगा?

उत्तर

3

this article को user voyce अंक प्रमुखता के विषय में एक और सवाल करने के लिए this answer कि मूल रूप से निम्नलिखित राज्यों:

जब किसी भी इंटरफेस (IDispatch व्युत्पन्न या नहीं) चिह्नित है या तो dual या oleautomation (या दोनों) यह खास तौर पर जब इलाज किया जाता है RegisterTypeLib() आविष्कार किया जाता है (जिसे आमतौर पर DllRegisterServer द्वारा किया जाता है)। ऐसे प्रत्येक इंटरफ़ेस के लिए एक HKCR \ Interface {InterfaceId} कुंजी बनाई गई है जिसके तहत {00020424-0000-0000-C0000-000000000046} कक्षा को प्रॉक्सी/स्टब के रूप में संदर्भित किया जाता है। यह कक्षा आईडी टाइपेलिब मार्शलर से मेल खाती है जिसे ऑलिओटॉमेशन मार्शलर भी कहा जाता है।

+0

आह हाँ, यह सही है। चूंकि आपके पास पहले से ही 'oleautomation' था, मुझे लगा कि यह निहित था ... मुझे सटीक विनिर्देशों को नहीं पता था, हालांकि, फॉलो-अप के लिए धन्यवाद! –

+0

और मुझे अभी भी लगता है कि आपको यह सुनिश्चित करना चाहिए कि ऑब्जेक्ट वर्तमान में इसे हटाने से पहले 'आईडीस्पैच' के लिए क्यूआई का जवाब नहीं दे रहा है। –

+0

हां, मैं पूरी तरह से आईडीआईस्पैच के साथ क्यूआई responce के बारे में सहमत हूं। – sharptooth

1

मैं एक कारण यह है कि कि काम करेगा, यहाँ डॉक्स दिया नहीं देख सकते हैं: http://msdn.microsoft.com/en-us/library/aa366807(VS.85).aspx

इंटरफेस दोहरी विशेषता से पहचान स्वचालन साथ संगत होना चाहिए और IDispatch से प्राप्त किया जा। यह विशेषता dispinterfaces पर अनुमति नहीं है।

यह हो सकता है कि [dual] विशेषता अंतर्निहित रूप से IDispatch इंटरफ़ेस में जोड़ती है।

यदि आप IDispatchImpl से प्राप्त होते हैं तो इंटरफ़ेस को कार्यान्वित करने वाले कोड को जांचें (यह एटीएल है)। यदि ऐसा है, तो यह वास्तव में IDispatch के लिए क्यूआई का जवाब देता है और इसका उपयोग इस तरह किया जा सकता है।

एक और विकल्प IOurInterface को लागू करने वाली ऑब्जेक्ट को तुरंत चालू करना है और IDispatch के लिए क्यूआई - यदि यह सफल होता है, तो आप शायद इसे हटा नहीं सकते हैं।

वास्तव में, यह सोचने के लिए आते हैं, हो सकता है [dual] तकनीकी रूप से की आवश्यकता नहीं है कि आप IDispatch से जब तक आप दोनों अपने कस्टम इंटरफेस और IDispatch लागू के रूप में निकाले जाते हैं?

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