से 32 बिट कोड को कॉल करना मेरे पास एक ऐसा एप्लिकेशन है जिसे हम 32 बिट से 64 बिट पर माइग्रेट करने का प्रयास कर रहे हैं। यह .NET है, x64 झंडे का उपयोग करके संकलित। हालांकि, हमारे पास 32 बिट के लिए संकलित फोरट्रान 90 में लिखे गए बड़ी संख्या में डीएलएल हैं। फोरट्रान डीएलएल में कार्य काफी सरल हैं: आप डेटा डालते हैं, आप डेटा खींचते हैं; किसी भी तरह की स्थिति नहीं है। हम वहां बहुत समय व्यतीत नहीं करते हैं, कुल 3%, लेकिन गणना तर्क यह निष्पादन योग्य है।64 बिट प्रक्रिया
क्या मैं 64 बिट कोड से 32 बिट डीएलएल को किसी भी तरह कॉल कर सकता हूं? एमएसडीएन सुझाव देता है कि मैं नहीं कर सकता, अवधि। मैंने कुछ सरल हैकिंग की है और इसे सत्यापित किया है। सब कुछ एक अवैध प्रविष्टि बिंदु अपवाद फेंकता है। मुझे अब तक का एकमात्र संभावित समाधान 32 बिट डीएलएल कार्यों के लिए COM + wrappers बनाना है और 64 बिट प्रक्रिया से COM को आमंत्रित करना है। यह काफी सिरदर्द की तरह लगता है। हम वाह इम्यूलेशन में भी प्रक्रिया को चला सकते हैं, लेकिन फिर मेमोरी छत में वृद्धि नहीं की जाएगी, लगभग 1.6 जीबी पर कैपिंग।
क्या 64 बिट सीएलआर प्रक्रिया से 32 बिट डीएलएल को कॉल करने का कोई अन्य तरीका है?
यह 64 बिट है -> COM -> 32 बिट चीज़ जो मैं वर्णन कर रहा था। उस लेख को पढ़ने और नमूने को काम करने की कोशिश करने के बाद, मैंने फैसला किया कि _got_ बेहतर तरीका बनने के लिए है। कम से कम मुझे ऐसी आशा है। –
जॉन का जवाब सही है। एक प्रक्रिया में 32-बिट और 64-बिट मॉड्यूल मिश्रित करने का कोई तरीका नहीं है। आपको दूसरी प्रक्रिया शुरू करने की जरूरत है। यहां मेरा उत्तर भी देखें: http://stackoverflow.com/questions/6523075/how-to-force-net-application-to-run-in-32bit-mode/6533556#6533556 –
आपको जरूरी उपयोग करने की आवश्यकता नहीं है COM + wrappers, लेकिन आपको 32-बिट प्रक्रिया का उपयोग करने की आवश्यकता है। –