2009-10-29 17 views
7

हम एक बड़े एमएफसी-आधारित एप्लिकेशन के एक मुट्ठी भर प्रबंधित (.NET) ऐड-इन्स के साथ एकीकरण पर काम कर रहे हैं। इन ऐड-इन्स के साथ संचार COM के माध्यम से किया जाता है।पंजीकरण-मुक्त COM इंटरऑप और आश्रित असेंबली

ऐतिहासिक रूप से, हमने एप्लिकेशन में इन ऐड-इन्स उपलब्ध (COM सर्वर के रूप में) बनाने के लिए रजिस्ट्री का उपयोग किया है। लेकिन, अब हम ऐसा करने के लिए पंजीकरण मुक्त COM इंटरऑप का उपयोग करने की कोशिश कर रहे हैं।

हम इन ऐड-इन्स को एक अलग निर्देशिका में रहने में सक्षम होने के लिए चाहते हैं, जिसमें एप्लिकेशन चल रहा है - आदर्श रूप से कहीं भी। लेकिन, हम आश्रित असेंबली को हल करने में असमर्थता के कारण सर्वर ऑब्जेक्ट्स के तत्कालता के साथ समस्याओं में भाग ले रहे हैं, जो COM सर्वर DLL के साथ निर्देशिका में भी रहते हैं।

"पुरानी शैली" COM इंटरऑप ने लोड असेंबली संदर्भ को लोड करते समय इसे लोड असेंबली संदर्भ का उपयोग करके संभाला। लेकिन सक्रियण संदर्भ तंत्र ऐसा प्रतीत नहीं होता है।

क्या कोई यह जानता है कि इसे काम करने के लिए कैसे प्राप्त किया जाए? यह स्पष्ट नहीं है कि हम मॉड्यूल के एसएक्सएस मेनिफेस्ट में निर्भर असेंबली की पहचान कर सकते हैं, या शायद हम सक्रियण संदर्भ को अलग-अलग बना सकते हैं?

किसी भी विचार/सुझाव के लिए धन्यवाद!

जेफ

+0

का उपयोग कर आप that' के लिए एक समाधान मिला अपने विधानसभा रजिस्टर करने की कोशिश? – RayOldProf

उत्तर

1

आशा मैं मुद्दे को समझने के रूप में मैं एक MFC परियोजना के साथ इतना परिचित नहीं हूँ और न ही यह कमी है। इंटरफ़ेस के साथ "जाने-माने" .NET क्लास (एमएफसी ऐप के साथ स्थायी रूप से पंजीकृत) के बारे में, जो बदले में, सभी सक्रियण और तत्काल संभालता है?

रॉडने

+2

यह वास्तव में एक कामकाज है जो सफल रहा है: हम एक सी ++/सीएलआई मॉड्यूल बनाते हैं, जिसे पंजीकरण-मुक्त तरीके से सक्रिय किया जा सकता है, और हम इसे सी # कक्षा को तुरंत चालू करने के लिए उपयोग करते हैं। इस काम के लिए, हमें एक असेंबली रीसोल्व इवेंट हैंडलर भी स्थापित करने की आवश्यकता है, ताकि एक ही निर्देशिका में निर्भर असेंबली स्थित हो सकें। यह ठीक है, लेकिन तरह का घबराहट है। ऐसा लगता है कि यह इस अतिरिक्त स्तर के संकेत के बिना काम करने में सक्षम होना चाहिए। – Jeff

-1

आप .net ढांचे के साथ intermediated (इंटरॉप) DLLs पंजीकृत है?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm "पथ .. \ AxInterop.xxx.dll" या C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm "पथ .. \ Interop.xxx.dll"

सादर फणी

+2

टिप्पणी के लिए धन्यवाद, फ़ानी। ऐसा करने का प्रयास करने का पूरा बिंदु पंजीकरण से बचने के लिए है। – Jeff

0

जब मैं Simplify App Deployment with ClickOnce and Registration-Free COM पर लेख को देखो मैं ध्यान दें कि वे ऐप्स मेनिफ़ेस्ट में पंजीकरण मुक्त COM वस्तु DLL के फ़ाइल नाम का संदर्भ लेने। मुझे लगता है कि इस फ़ाइल नाम को एक निर्देशिका या इस तरह शामिल करने के लिए बदला जा सकता है।

दूसरा, "ए मोर कॉम्प्लेक्स उदाहरण" खंड में, वे निर्भर COM वस्तुओं को उनके प्रोजेक्ट के संदर्भ के रूप में शामिल करते हैं और उन्हें पृथक के रूप में सेट करते हैं। यही है, वे अब भी पंजीकरण मुक्त हैं। मेरा अनुमान है कि उनके पथ को भी अपडेट किया जा सकता है।

+0

हम वास्तव में आवेदन प्रकट को संशोधित करने की विलासिता, विधानसभाओं यहां लोड किए जाने के रूप में "ऐड-इन्स" हैं, और इस तथ्य के बाद जोड़ा जा सकता है की जरूरत नहीं है। ऐसा नहीं है कि मॉड्यूल प्रकट में अधिक कुछ कर जवाब यहाँ है, लेकिन कुछ भी नहीं है कि हम कोशिश की है काम किया है किया जाएगा संभव है - यह "बस" एक .NET के लोड हो रहा है एल्गोरिदम के साथ समस्या यह प्रतीत होता है। – Jeff

-1

अपने दृश्य स्टूडियो कमांड प्रॉम्प्ट खोलने के लिए और regasm

regasm /tlb:"path" 
+3

मैं ऊपर उल्लेख के रूप में, हम नहीं कुछ भी पंजीकृत करना चाहते हैं। इसमें टाइप लाइब्रेरी शामिल होगी। इसके अलावा, इस मामले में, हम जिस इंटरफ़ेस को कार्यान्वित कर रहे हैं, उसके लिए टाइप लाइब्रेरी वास्तव में पहले ही पंजीकृत है। – Jeff

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