2009-06-03 18 views
9

में कनवर्ट करें जब मैं इसे 64 बिट अनुप्रयोग में उपयोग करने का प्रयास करता हूं तो 32 बिट संकलित डीएल है, यह लोड करने में विफल रहता है, तो मैं डीएल को 64 बिट में कनवर्ट करना चाहता हूं। यह काम ठीक है जब एप्लिकेशन का मंच "कोई भी CPU" या "x64" से "x86" में बदल गया। लेकिन मैं इसे 64 बिट के तहत उपयोग करना चाहता हूं, क्योंकि मैं एएसपी पृष्ठों से डीएलएल कॉल करने जा रहा हूं।32 बिट डीएल को 64 बिट डीएल

कृपया मुझे इसके साथ मदद करें।

+0

पर एक नज़र ले जा सकते हैं यह एक dll आप पुन: संयोजित कर सकते हैं? – kbyrd

उत्तर

0

यदि आप 32 और 64 बिट प्रक्रिया दोनों में शुद्ध सी # डीएलएल लोड करना चाहते हैं, तो सही विकल्प AnyCPU है। यह इसे डीएलएल को सीपीयू अज्ञेयवादी के रूप में संकलित करेगा और यह किसी भी प्रकार की प्रक्रिया में लोड हो जाएगा।

मुझे 100% यकीन नहीं है कि आप जो भी पूछ रहे हैं। यदि यह नहीं है तो आप अपने प्रश्न को स्पष्ट कर सकते हैं?

10

विंडोज 64 बिट प्रक्रिया में 32 बिट डीएल लोड नहीं कर सकता - यह एक सीमा है जिसे आप बाधित नहीं कर सकते हैं। इसका मतलब यह है कि यदि आपका 32 बिट डीएलएल अन्य 32 बिट डीएलएलएस (या किसी भी 32 बिट .NET DLLS का उपयोग करता है) के लिए कोई पी/आमंत्रण करता है तो आप पूरी तरह भाग्य से बाहर होंगे (आपको पूरी वेबसाइट 32 बिट में चलाने की आवश्यकता होगी)।

जब आप काम करते हैं और जब ऐसा नहीं होता है तो आप पूरी तरह से स्पष्ट नहीं होते हैं। यहां स्पष्टीकरण दिए गए हैं:

  1. x86 - 32 बिट - 64 बिट प्रक्रिया में लोड नहीं किया जा सकता है।
  2. x64 - 64 बिट - 32 बिट मशीन पर निष्पादित नहीं किया जा सकता है।
  3. कोई भीCPU - दोहरी - दोनों वातावरण में लोड और निष्पादित किया जा सकता है।

AnyCPU के संदर्भ में:

64 बिट मशीन पर
  1. 64 बिट प्रक्रिया - DLL 64 बिट के रूप में भरी हुई है।
  2. 32 बिट मशीन पर 32 बिट प्रक्रिया - डीएलएल 32 बिट के रूप में लोड किया गया है।
  3. 64 बिट मशीन पर 32 बिट प्रक्रिया - डीएलएल 32 बिट के रूप में लोड किया गया है।

ज्यादातर मामलों में इसे किसी भीCPCP के रूप में छोड़ना ठीक है। हालांकि, जैसा कि मैंने कहा था, यदि आप किसी भी देशी या .Net 32 ​​बिट DLL का उपयोग कर रहे हैं तो आपको अपना पूरा एप्लिकेशन 32 बिट (और ऐसा कुछ भी नहीं है जिसे आप कर सकते हैं, या माइक्रोसॉफ्ट ऐसा कर सकता है)।

+0

सिर्फ विंडोज़ नहीं, सभी ओएस! –

+0

एक थंकिंग परत और कुछ चालाक कोड का उपयोग करना संभव है। कुछ कंपाइलर्स थंकिंग का समर्थन करते हैं और आपके लिए कड़ी मेहनत करेंगे। मैंने इसे पहले ओएस/2 के तहत किया है। यानी 32 बिट प्रक्रिया से 16 बिट डीएलएल लोड किया और 16 बिट प्रक्रिया से 32 बिट डीएलएल भी इस्तेमाल किया। लेकिन 32-बिट मशीन पर 64-बिट कोड को मूल रूप से चलाने के लिए संभव नहीं है। – Matt

+0

धन्यवाद! मेरा ऐप विंडोज एक्स 64 इंस्टॉलेशन पर असफल रहा - ऐसा लगता है कि तीसरी पार्टी डीएलएल को x86 के रूप में संकलित किया गया था। X86 पर अपना ऐप सेट करने से इसे ठीक कर दिया गया है। – mbmcavoy

2

x86 ध्वज आमतौर पर एक कारण के लिए सेट किया जाता है, इसलिए इसे बदलने का बुरा विचार हो सकता है। लेकिन अगर आप पूरी तरह से सुनिश्चित हैं, तो एक उपयोगिता, corflags.exe है। मेरे पास यह सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट एसडीके \ विंडोज \ v6.0A \ bin के अंतर्गत है। बेशक यह केवल .NET असेंबली के साथ मदद करेगा।

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