2008-12-11 15 views
22

मेरे पास एक x64 सर्वर है, क्योंकि मेरी लाइब्रेरी किसी भीCPC को संकलित की जाती है, x64 के अंतर्गत चलती है। हमें एक COM घटक तक पहुंचने की आवश्यकता है जो x86 के अंतर्गत पंजीकृत है। मुझे COM के बारे में पर्याप्त जानकारी नहीं है और मेरी Google खोज मुझे कहीं भी नहीं ले जा रही हैं।x64 से x86 COM एक्सेस करें .NET

प्रश्न: क्या मैं COM घटक के लिए x64 से x86 तक प्रतीकात्मक रजिस्ट्री लिंक का उपयोग कर सकता हूं? क्या मुझे x64 के तहत COM घटक को पंजीकृत करने की आवश्यकता है? क्या मैं (यहां कोई कथन ...) कर सकता हूं?

धन्यवाद।

उत्तर

26

यदि कोई घटक x64-native चला रहा है, तो यह प्रक्रिया में 32-बिट COM सर्वर लोड नहीं कर सकता है, क्योंकि यह गलत प्रकार की प्रक्रिया है। कई संभावित समाधान के एक जोड़े हैं:

  1. आप, COM कोड का एक 64-बिट संस्करण (जो निश्चित रूप से 64-बिट रजिस्ट्री में खुद को रजिस्टर होता है) का निर्माण कर सकते हैं। यह सबसे साफ समाधान है, लेकिन यदि आपके पास COM सर्वर के लिए कोड नहीं है तो संभव नहीं हो सकता है।

  2. x64 के बजाय 32-बिट x86 के रूप में अपना .NET घटक चलाएं। मुझे लगता है कि आप किसी कारण से पहले ही इस पर विचार कर चुके हैं और इसे खारिज कर चुके हैं।

  3. COM surrogate DLLhost.exe का उपयोग कर COM घटक आउट ऑफ़ प्रक्रिया को होस्ट करें। यह COM सर्वर को बहुत धीमा कर देगा, बहुत धीमा (अब वे देशी फ़ंक्शन कॉल के बजाय इंटरप्रोसेस विंडोज संदेश होंगे), लेकिन अन्यथा पारदर्शी है (आपको कुछ विशेष करने की ज़रूरत नहीं है)।

    यह शायद एक विकल्प नहीं हो सकता है अगर सर्वर के बजाय (हालांकि, कम ही है) सामान्य oleaut32 एक का उपयोग कर के एक कस्टम प्रॉक्सी-ठूंठ की आवश्यकता है, के बाद से वहाँ प्रॉक्सी उपलब्ध की एक 64-बिट संस्करण नहीं होगा । जब तक यह सामान्य ओएलई मार्शलिंग का उपयोग कर सकता है, तो आप केवल register it for surrogate activation कर सकते हैं।

+0

# 1 संभव नहीं है क्योंकि कोई x64 संस्करण नहीं है। # 2 x64 पर चलने के उद्देश्य को हरा देता है। # 3 बहुत अच्छा काम किया। जब तक हमें लाइब्रेरी का नया संस्करण नहीं मिलता है तब तक हम प्रदर्शन हिट के साथ रह सकते हैं। आपकी सहायता के लिए धन्यवाद. –

2

यह अपने COM घटक (यानी एक अलग प्रक्रिया) तो आप कॉम उपतंत्र के रूप में कुछ भी विशेष करने की जरूरत नहीं होगी एक COM सर्वर में रखा हुआ है की इच्छा दूरस्थ X86 ऐप में अपना 64 ऐप्लिकेशन से अपने कॉल और फिर से वापस।

यदि आपका घटक एक इन-प्रोसेस COM घटक है तो आपको चीजों पर पुनर्विचार करना होगा क्योंकि 64 बिट प्रक्रिया प्रक्रिया 32 घटक में COM बिट का उपयोग नहीं कर सकती है। आप अपने सर्वर को x86 के तहत चलाने के लिए मजबूर कर सकते हैं ताकि आप घटकों तक पहुंच सकें (वे दोनों 32 बिट प्रक्रियाएं होंगी)। यदि आप ऐसा नहीं करना चाहते हैं तो आपको यह देखना होगा कि आपके द्वारा उपयोग किए जा रहे COM घटकों का x64 बिट संस्करण है या नहीं। से प्रक्रिया को आउट-ऑफ-प्रक्रिया
(मेरे लिए यह काम) एक मेजबान के रूप में COM + का उपयोग करना •
का उपयोग करना • एक परियोजना प्रकार परिवर्तित •
:

6

मैं इस समाधान पाया है, Dealing with Legacy 32-bit Components in 64-bit Windows लेख में देखते हैं एक सरोगेट होस्ट के रूप में dllhost

+7

मिरर लिंक: http://www.scribd.com/doc/56629579/64- बिट-इंसर- वॉल्यूम -1- Issue-7 – Juhl

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