2012-09-18 12 views
11

मैं एक सी # विंडोज ऍप्लिकेशन जो भी आंतरिक रूप से कुछ कार्यों कॉल तैयार किया है के साथ भाग जाने के साथ एक कार्यक्रम लोड करने के लिए बनाया गया था [() DllImport के माध्यम से सी ++ DLL से आयातित]का प्रयास गलत प्रारूप अपवाद वी.एस. स्थापना

मेरे सी ++ कोड Win32 प्लेटफ़ॉर्म में डीएलएल के रूप में बनाया गया है जबकि मेरा सी # "कोई भी CPU" प्लेटफार्म के रूप में बनाया गया है।

जब मैं अपने परीक्षण मशीन में .EXE (सी #) चलाने के लिए, मैं एक त्रुटि

के रूप में एक प्रयास HRESULT से गलत प्रारूप अपवाद के साथ एक कार्यक्रम लोड करने के लिए 0x8007000B

बनाया गया था का सामना

हालांकि, अगर मैं अपनी मशीन में वीएसएस 2010 स्थापित करता हूं और फिर EXE चलाता हूं तो यह त्रुटि का सामना नहीं किया जाता है।

1) इस त्रुटि का कारण? 2) वीएसएस स्थापित होने पर त्रुटि क्यों नहीं देखी गई है?

मैं का उपयोग किया है Win7 ओएस (64 बिट) मंच है जो बदले में Win32

में बनाया (सी DllImport का उपयोग कर # में आयातित सी ++ Dll) एक DLL पर निर्भर करता है AnyCPU में .EXE (सी #) के निर्माण के लिए
+0

मुझे लगता है कि यह एक गड़बड़ मिस्चैच त्रुटि है - आपका। डीएल 32-बिट है और आपका .exe 64-बिट या दूसरी तरफ है। वीएस सामानों का एक पूरा समूह स्थापित करता है, हालांकि मुझे नहीं पता कि यह आपकी समस्या का समाधान कैसे करेगा। – dandan78

+0

क्या कोई मदद कर सकता है? –

+0

ओएस, .dll bitness और .exe bitness शामिल करने के लिए कृपया अपना प्रश्न अपडेट करें। साथ ही, अपनी बिल्ड सेटिंग्स की जांच करें और अपने .dll के bitness से मेल खाने के लिए .Net भाग को मजबूर करें। – dandan78

उत्तर

10

यह लगभग हमेशा होता है क्योंकि आप 64 बिट डीएल/एक्सई आदि से 32 बिट कोड या 32 बिट डीएल से 64 बिट डीएल कॉल कर रहे हैं। यदि आप x86 के लिए C# बनाते हैं तो क्या होता है? यह अभी भी 64 बिट पर चलेंगे।

+0

मैं अभी भी सोच रहा हूं क्योंकि परीक्षण मशीन 32 बिट है और सी ++ डीएल को 64 बिट के रूप में जेनरेट किया गया है जब मैंने प्लेटफ़ॉर्म में Win32 चुना है। जब मैं x86 (किसी भी CPU के बजाय) का उपयोग करता हूं, तो यह समस्या हल हो जाती है। यहां विस्तार से क्या समस्या है? –

+0

किसी भी सीपीयू का मतलब है कि ढांचा यह पता लगाएगा कि आवेदन शुरू होने पर 64 या 32 बिट के रूप में चलाना है या नहीं। मैं परीक्षण मशीन को 64 होने की उम्मीद करता था और इस प्रकार रनटाइम पर 32 बिट सी ++ डीएल कॉल करने में सक्षम नहीं था। –

+0

डीएल को Win32 के रूप में बनाया गया है और EXE किसी भी CPU प्लेटफ़ॉर्म (VSS में) के रूप में बनाया गया है जो x86bit मशीन पर है जहां वीएस स्थापित है। अब, टेस्ट मशीन में ओएस का x86 संस्करण है जहां यह एप्लिकेशन चलाया जा रहा है। जहां से, 64 बिट पिचिंग कर रहा है क्योंकि सबकुछ x86 है। –

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