2011-01-12 20 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो पृथक परिनियोजन में देशी COM dll से कुछ कक्षाओं का उपयोग करता है।सक्रियण संदर्भ खो गया?

सरलीकृत: रन-टाइम में मैं इसे अपनी पंजीकृत फ़ाइल के साथ डीएलएल को पंजीकृत किए बिना एक निश्चित निर्देशिका में डाउनलोड करता हूं। फिर मैं उस निर्देशिका को इंगित करने वाला एक सक्रियण संदर्भ बना देता हूं और बाद में डीएल से कक्षाओं के उदाहरण बना देता हूं। मान लें कि कक्षा ए बनाना और थोड़ी देर के बाद बी बी इस प्रवाह में सभी ठीक हो जाते हैं।

समस्या तब शुरू हुई जब मैंने अपना एप्लिकेशन WinForm बनने के लिए बदल दिया। जब "बटन 1" दबाया जाता है तो मैं पहले के रूप में सक्रियण संदर्भ बना देता हूं और फिर कक्षा ए का एक उदाहरण बना देता हूं यह अच्छी तरह से काम करता है और प्रवाह मेरे WinForm पर वापस आता है। हालांकि जब "बटन 2" दबाया जाता है, तो मैं कक्षा बी बनाने में विफल रहता हूं मुझे यह कहते हुए एक अपवाद मिलता है कि कक्षा नहीं मिल सकती है!

तो ऐसा लगता है कि WinForm किसी भी तरह से मेरे सक्रियण संदर्भ को गड़बड़ कर रहा है। - वह क्यों है? वहाँ क्या हो रहा है? - क्या इसके आसपास कोई रास्ता है?

कुछ नोट्स: - मैंने sxstrace.exe का उपयोग कर सक्रियण संदर्भ रचनाओं का पालन करने का प्रयास किया, हालांकि यह केवल मेरे सक्रियण संदर्भ निर्माण को लॉग किया गया। - मैंने एप्लिकेशन को टिप्पणी करने का प्रयास किया। सक्षम VisualStyles() लेकिन इससे मदद नहीं मिली। - अगर मैं के साथ बना सकते हैं और एक्टिवेशन प्रसंग को नष्ट यह काम करता है लेकिन स्वाभाविक रूप से मैं वहाँ गया नहीं करना चाहता ..

उत्तर

1

CLR बनाए रखने के लिए गारंटी नहीं है मेरी dll की प्रत्येक कॉल लपेट/जब से गुजर रहा Win32 सक्रियण प्रसंग की रक्षा प्रबंधित कोड

एक वर्कअराउंड देशी कोड को कॉल करना है, वहां सक्रियण संदर्भ सेट करना है, जो आपको चाहिए, और उसके बाद संदर्भ को पुनर्स्थापित करें। आपको शायद ऑब्जेक्ट को लोड करने और बाध्य करने के लिए केवल इसकी आवश्यकता है, इसलिए एक बार जब आप एक अज्ञात हो तो आप उसे वापस कर सकते हैं।

मार्टिन

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