2010-06-07 17 views
14

का उपयोग कर 64-बिट प्रबंधित कोड से 32-बिट अप्रबंधित कोड को कॉल करने का सबसे अच्छा तरीका आवृत्ति जिसके साथ मैं स्थिति में आ रहा हूं जहां मुझे एक प्रबंधित 64-बिट प्रक्रिया से मूल 32-बिट कोड कॉल करना है 64-बिट मशीनों और अनुप्रयोगों के रूप में बढ़ रहा है प्रचलित हो गया है। मैं अपनी प्रशंसा 32-बिट के रूप में चिह्नित नहीं करना चाहता हूं और मुझे कॉल करने वाले कोड के 64-बिट संस्करण प्राप्त नहीं हो सकते हैं।एक प्रबंधित कोड रैपर

जो समाधान मैं वर्तमान में उपयोग करता हूं वह सी ++ COM शिम्स बनाने के लिए है जो 64-बिट प्रक्रिया से 32-बिट कॉल करने के लिए प्रक्रिया से बाहर लोड होते हैं।

यह COM शिम समाधान अच्छी तरह से काम करता है और क्रॉस प्रोसेस कॉल COM द्वारा दृश्यों के पीछे संभाला जाता है, जो इस दृष्टिकोण के ऊपरी हिस्से को कम करता है।

हालांकि मैं सी # का उपयोग करके किए गए सभी नए विकास को रखना चाहता हूं और सोच रहा हूं कि क्या ऐसा कोई ढांचा है जो ऐसा करने के ऊपरी हिस्से को कम करता है। मैंने आईपीसीसीएचनल को देखा है लेकिन मुझे लगता है कि यह दृष्टिकोण COM शिम समाधान के रूप में साफ नहीं है।

धन्यवाद, एड

+1

इसके लायक होने के लिए, COM समाधान आईएमओ जाने के तरीके की तरह लगता है। –

उत्तर

7

मुझे एक ही समस्या थी और मेरा समाधान remoting का उपयोग करना था। मूल रूप से इस परियोजना में शामिल हैं: x32 पी के साथ

  • CalculatorNative आंतरिक स्थिर वर्ग के साथ

    • प्लेटफॉर्म-स्वतंत्र CalculatorRemote.dll पुस्तकालय/आह्वान तरीकों
    • RemoteCalculator वर्ग MarshalByRefObject जो CalculatorNative से देशी तरीकों का इस्तेमाल किया से प्राप्त;
  • मुख्य मंच स्वतंत्र सी # पुस्तकालय (जैसे Calculator.dll), CalculatorRemote.dll संदर्भित, Calculator वर्ग जो निजी तौर पर RemoteCalculator वर्ग की सिंगलटन उपयोग कर रहा था x32 कार्यों जहां जरूरत आह्वान करने के लिए के साथ;
  • x32 कंसोल एप्लिकेशन CalculatorRemote.dll से Calculator.dllIpcChannel के माध्यम से उपभोग करने के लिए RemoteCalculator होस्ट किया गया।

तो अगर मुख्य आवेदन 64 मोड यह एक RemoteCalculator मेजबान आवेदन को उत्पन्न करने और इस्तेमाल किया गया था में शुरू RemoteCalculator उदाहरण remoted। (जब x32 में यह सिर्फ RemoteCalculator का स्थानीय उदाहरण इस्तेमाल करता था।) मुश्किल हिस्सा कैलकुलेटर-होस्ट एप्लिकेशन को बंद करने के लिए कह रहा था।

मैं इस लगता है कि यह COM का उपयोग कर, क्योंकि की तुलना में बेहतर:

  • आप कहीं भी COM कक्षाएं रजिस्टर करने के लिए नहीं है;
  • COM के साथ इंटरऑपरेट करना .NET रिमोटिंग से धीमा होना चाहिए;
  • कभी-कभी अगर COM-पक्ष पर कुछ गलत हो रहा है तो आपको उस से पुनर्प्राप्त करने के लिए अपने एप्लिकेशन को पुनरारंभ करना होगा; (संभवतः मैं COM से बहुत परिचित नहीं हूं)
  • x32 मोड में चलते समय रिमोटिंग के साथ कोई प्रदर्शन दंड नहीं होगा - सभी विधियों को उसी ऐपडोमेन में शामिल किया जाएगा।
5

सुंदर बहुत ही जवाब प्रक्रिया संचार से बाहर है। आप एक .NET प्रोजेक्ट बना सकते हैं जो एक 32-बिट निष्पादन योग्य है जो 32-बिट कॉल की आवश्यकता होती है और विंडोज संदेश, डब्ल्यूसीएफ, नामित पाइप्स, मेमोरी मैप किए गए फ़ाइलें (4.0) आदि के माध्यम से इसके साथ संवाद करती है। मुझे पूरा यकीन है इस प्रकार पेंट.NET 64-बिट प्रक्रिया से उनके डब्ल्यूआईए (विंडोज इमेजिंग अधिग्रहण) करता है।

पीडीएन के मामले में, वे बस उस फ़ाइल का नाम पास करते हैं जिसे वे आउटपुट के रूप में उम्मीद करते हैं, लेकिन अधिक जटिल संचार मुश्किल नहीं है। आप जो कर रहे हैं उसके आधार पर यह एक बेहतर तरीका हो सकता है।

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