यहां एक ठोस उदाहरण है:क्या एक मार्शल इंटरफ़ेस को मार्शल करना मुझे प्रॉक्सी या मूल इंटरफ़ेस में मार्शलर देता है?
मैं wb.CoCreateInstance(CLSID_InternetExplorer, 0, CLSCTX_SERVER);
पर कॉल करके IWeBrowser2 इंटरफ़ेस बना देता हूं। यह मुझे मेरी प्रक्रिया से एक मार्शल इंटरफेस देता है जो भी चल रहा है iexplore.exe प्रक्रियाओं में इस ब्राउज़र टैब को मेरे थ्रेड ए में शामिल किया जाता है।
अब मैं IGlobalInterfaceTable उपयोग करते हैं, इस इंटरफेस के लिए एक कुकी प्राप्त यह मेरी धागा को पारित करने के लिए और वहाँ से मार्शल इंटरफ़ेस का अनुरोध करें।
प्रश्न: मैं अपने धागा एक में या सीधे आईई प्रक्रिया में उदाहरण के लिए प्रॉक्सी के लिए एक प्रॉक्सी मिलता है?
यह मेरे लिए समझदार है कि मैं यह करने के लिए अपने स्वयं के संदर्भ में उदाहरण के लिए एक सीधा प्रॉक्सी मिल जाएगा लगता है,
तथापि:
अगर मैं अपने धागा एक अंत, कुकी मेरे द्वारा बनाए गए वहाँ अमान्य हो जाता है और मैं इंटरफ़ेस पॉइंटर्स को उन वेब ब्राउज़र पर पुनर्प्राप्त (और बंद) नहीं कर सकता हूं जिन्हें मैंने और बनाया है। यह तब तक समझ में नहीं आता है जब तक थ्रेड में कोई थंक न हो जो थ्रेड छोड़ने पर नष्ट हो जाता है।
संपादित करें: ओह, दोनों धागे एसटीए हैं।
दोनों धागे एसटीए हैं। इसके अलावा, मैं RevokeInterfaceFromGlobal को कॉल नहीं करता हूं। GetInterfaceFromGlobal केवल E_INVALIDARG लौटाता है जब मैं थ्रेड ए समाप्त होने के बाद इसे कॉल करता हूं। – Fozi
बहुत असामान्य। आप RevokeInterfaceFromGlobal कहां कह रहे हैं? –
मेरे पास संदर्भ संदर्भित ऑब्जेक्ट है जो कुकी को संभालता है। जब सभी संदर्भ चले जाते हैं, तो इसे निरस्त कर दिया जाता है। कुकीज़ को पूल में रखा जाता है और बाहर निकलने पर जारी किया जाता है। – Fozi