2009-07-12 4 views
11

मैं पूछता हूं क्योंकि मैंने देखा है कि 32-बिट डीएलएल के रूप में दिखाई देने वाले कई 64 बिट EXE लिंक हैं।32-बिट डीएलएल के खिलाफ 64 बिट एक्सई लिंक कर सकते हैं?

उदाहरण के लिए, मेरे 64 बिट एमएफसी ऐप user32.dll, urlmon.dll, wininet.dll के खिलाफ लिंक करता है - जिनमें से सभी 32 बिट डीएलएल हैं जो विंडोज \ system32 में रहते हैं।

तो क्या यह कुछ एमएस विशिष्ट जादूगर है जो इन डीएलएल पर लागू होता है, या पिछली संगतता है, जैसा 64 बिट EXEs के लिए है, जो विरासत 32 बिट डीएलएल का उपयोग करने की आवश्यकता है?

+0

मुझे लगता है कि हम सभी निर्भरता वाकर के अगले संस्करण के लिए तैयार हैं। यह कभी-कभी भ्रामक तरीके से 64 बिट निष्पादन योग्य हैंडल करता है, और कुछ अन्य परेशान चेतावनियां दिखाता है। वे वास्तव में बग नहीं हैं, लेकिन निश्चित रूप से बेहतर प्रस्तुत किया जा सकता है। मुझे लगता है कि इस तरह के प्रश्न एक नए संस्करण के लिए एक +1 हैं। – eran

+0

@Eran, मैंने 64 बिट के लिए नवीनतम डाउनलोड किया है और यह निर्भर डीएलएल को 64 के रूप में दिखाता है। –

+0

वास्तव में कुछ जादूगर है - Win64 पर 64-बिट ntdll.dll सभी प्रक्रियाओं में लोड हो जाता है, 32-बिट और 64 दोनों -बिट। लेकिन आपके द्वारा वर्णित किसी भी डीएलएल के बारे में कुछ भी जादू नहीं है। –

उत्तर

23

आप 32-बिट EXEs को 32-बिट DLL या इसके विपरीत से लिंक नहीं कर सकते हैं। 64-बिट विंडोज ओएस पर, विंडोज़ \ System32 में डीएलएल वास्तव में 64-बिट डीएलएल हैं। 32-बिट संस्करण विंडोज \ SysWow64 में हैं।

+1

निर्भर करता है कि उन छवियों को 32 बिट के रूप में दिखाता है ... कैसे आते हैं? –

+6

यदि "निर्भर करता है" 32-बिट प्रोग्राम है, तो ssg की टिप्पणी play में आती है - WOW परत फ़ाइल सिस्टम के 32-बिट अनुप्रयोगों के दृश्य को पुनर्निर्देशित करती है ताकि वे देख सकें कि SysWow64 में System32 में क्या है। –

+0

वाह, मैंने हमेशा इसे दूसरी तरफ सोचा। दिलचस्प। – thebunnyrules

13

64 से 32 कॉल करें, निश्चित रूप से यह कर सकता है। (विंडोज़ में इसे वाउ विच कहा जाता है जिसका मतलब विंडोज़ पर विंडोज़ है)। लेकिन, उपाध्यक्ष यह काम नहीं करता है।

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

आशा है कि यह कार्य करता है:

यहाँ आप कैसे की व्याख्या की है।

+1

यह एक उपयोगी तकनीक है और इसे वास्तव में दोनों दिशाओं में काम करना चाहिए, लेकिन यह वास्तव में "इसके खिलाफ लिंक नहीं" है। –

+0

ओह, ठीक है: डी मुझे इसके बारे में अधिक जानने की आवश्यकता होगी: डी – Sheldon

+1

सटीक होने (और निराशा से बचने के लिए), यह वास्तव में "64 से 32 कॉल करें" नहीं है, लेख में वर्णित "समाधान" सिर्फ सरोगेट 32 बनाता है 64-बिट प्रक्रिया से कॉल अग्रेषित करने के लिए आईपीसी प्रक्रिया - और आईपीसी का उपयोग करता है। जहां तक ​​मुझे पता है, "64 से 32 कॉल करें" सीधे संभव नहीं है (उपयोगकर्ता मोड में)। – rustyx

2

निर्भरता वाकर का नवीनतम संस्करण (यहां पाया गया: http://www.dependencywalker.com/) इस समस्या को हल करता है। यह सही DLL पाता है, और गलत त्रुटियों से बचाता है।

(मैं पार्टी के लिए देर हो रही है, लेकिन जब मैं एक ऐसी ही समस्या थी गूगल अब भी यह प्रश्न नहीं मिला।)