2011-12-27 13 views
5

उपयोग करने के लिए मैं सी # के लिए here दिखाया उदाहरण परियोजना को संकलित करने के कोशिश कर रहा हूँ की कोशिश कर रहा पर बिना क्रिया का अपवाद फेंकता है। इसे वीएस -2010 में परिवर्तित किया जाना था, लेकिन यह ठीक काम किया। यह बनाता है, चलता है, लेकिन फिर जब यह एक डीएलएल समारोह तक पहुंचने का प्रयास करता है तो मर जाता है।सी # DLL रन-टाइम त्रुटि -, बनाता है चलाता है, लेकिन DLL कार्यों

मैं अपने चरण दिखाने का images की एक श्रृंखला बना दिया। जैसा कि आप देख सकते हैं, मैंने जिस डिवाइस को डिज़ाइन किया है वह संलग्न है और सही तरीके से कॉन्फ़िगर किया गया है, लेकिन मुझे नहीं लगता कि इस मुद्दे के साथ कुछ भी करना है।

/* 
PLEASE NOTE 
You must add a reference to the FTChipIDNet.dll in order to use this sample 
To do this: 
1. Click on Solution explorer tab. 
2. Right click the References tree. 
3. Choose Add Reference option. 
4. Browse to the FTChipIDNet.dll (as a personal preference I place this in my bin directory) 
5. Click OK 
*/ 

मैं निर्देशों ऊपर दिखाए गए और नाम स्थान FTChipID तय किया गया था करने के लिए अपरिभाषित संदर्भ का पालन किया: Form1.cs फ़ाइल के अंदर, निम्नलिखित टिप्पणी कैसे DLL उपयोग कैसे करें। यह सुनिश्चित करने के लिए कि GetNumDevices फ़ंक्शन मौजूद है और यह करता है, मैंने मैन्युअल रूप से ऑब्जेक्ट ब्राउज़र को भी चेक किया है। कोड की इस पंक्ति में

DLLNotFoundException was unhandled:

Unable to load DLL 'FTChipID.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

:

बटन पर क्लिक करने पर यह त्रुटि पैदा करता

FTChipID.ChipID.GetNumDevices(ref numDevices); 

अब, आप सोच रहे होंगे "त्रुटि कहना है कि वह FTChipID.dll की जरूरत है, नहीं FTChipIDNet। dll। " मैं वही बात सोच रहा हूं। मेरे पास एक .lib और .h फ़ाइल के साथ FTChipID.dll है, लेकिन मुझे नहीं पता कि उन्हें कैसे उपयोग किया जाए या उन्हें इस प्रोग्राम के लिए कहां मिलना है। मैं FTChipID.dll के लिए एक संदर्भ जोड़ने की कोशिश की है, लेकिन VS2010 कहा

A reference to ...\FTChipID.dll could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.

मैं नहीं जानता कि क्या है कि या तो मतलब है। कोई विचार? अग्रिम में धन्यवाद।

+0

क्या आप प्रोजेक्ट संदर्भ के हिस्से के रूप में .dll जोड़ रहे हैं ..? aslo आप उस .dll के नेमस्पेस का उपभोग कर रहे हैं .. उस .dll के संस्करण में भी देखें .. या यदि आवश्यक हो तो जीएसी .dll एक .net 2.0 - 3.5 .dll बनाम .NET 4.0 .dll भी एक नज़र डालें प्रोजेक्ट के लिए प्रॉपर्टी सेटिंग्स पर यह सुनिश्चित करें कि यह एक 4.0 प्रोजेक्ट है, मैं इसे 3.5 प्रोजेक्ट के रूप में संकलित करने की कोशिश करता हूं और यह भी देखने के लिए कि अंतर क्या हैं .. – MethodMan

+0

अपनी परियोजना में आउटपुट के रूप में FTChipID.dll जोड़ें (या इसे कॉपी करें बिन \ डीबग फ़ोल्डर) और पुनः प्रयास करें। मुझे लगता है कि FTChipIDNet।डीएल पूर्व के लिए एक रैपर है। – rene

+0

FTChipID.dll को उसी निर्देशिका में FTChipIDNET.dll के रूप में रखें। ढांचे को तब ढूंढने में सक्षम होना चाहिए। –

उत्तर

2

FTChipIDNet.dll FTChipID.dll के लिए एक आवरण है अपने \ windows \ system32 निर्देशिका के लिए दोनों की प्रतिलिपि बनाएँ, और उसके बाद की प्रतिलिपि FTChipID.dll बिन फ़ोल्डर में FTChipIDNet.dll स्थित होगा।

दोनों dll के संचालित करने के लिए अपने समाधान के बिन फ़ोल्डर में स्थित होना चाहिए और में windows \ system32 नहीं स्थित होना चाहिए।

+0

धन्यवाद \ Windows \ System32 \। यह कम से कम एक अलग त्रुटि उत्पन्न की। मौजूदा आइटम के रूप में प्रोजेक्ट में FTChipID.dll जोड़ने के बाद, VS2010 डीबगर चलाने के दौरान इसे ढूंढने में सक्षम था। नई ओपी मेरे ओपी के नीचे टिप्पणी में है। – Anthony

+0

यहां एक लिंक है जो नए त्रुटि संदेश में मदद कर सकता है। http://stackoverflow.com/questions/2023766/an-attempt-was-made-to-load-a-program-with-an-incorrect-format-even-when-the-p – Leons

+0

लिंक के लिए धन्यवाद। उस लिंक को पढ़ने से मुझे एफटीडीआई से पूछने के लिए प्रेरित किया गया अगर उन्होंने FTChipID.dll का 64 बिट संस्करण जारी किया। 20 मिनट से भी कम समय में, मुझे एक प्रतिक्रिया मिली! "हम वर्तमान में FTChipID.dll की एक 64-बिट संस्करण नहीं करते हैं। हम उपयोगकर्ताओं को, जो एक 32-बिट उत्पादन के लिए संकलन और कहा कि दोनों 32- और 64-बिट सिस्टम पर अच्छी तरह से चलाता है होते हैं।" तो, ऐसा लगता है कि मुझे 32 बिट बिल्ड का उपयोग करना है। वीएस -2010 एक्सप्रेस एक विकल्प के रूप में पेश नहीं करता है, लेकिन मैं उस भाग को समझूंगा। सबको धन्यवाद! – Anthony

0

ऐसा लगता है कि देखते हैं कई .dll के: दोनों FTChipIDNet.dll (एक आप के लिए इंटरफेस), और FTChipID.dll (वास्तविक, गैर कॉम, non-.Net कार्यक्षमता के साथ एक)। आपको दोनों की जरूरत है

सुझाव: तो आप अपने समाधान के संदर्भ में जोड़ने की जरूरत है (आप उपरोक्त तरीके)

+0

क्या आपका मतलब है कि उसे जीएसी दोनों या दोनों कॉपी करें ..? आपकी प्रतिक्रिया के बारे में सिर्फ उत्सुक है। – MethodMan

+3

एप्लिकेशन फ़ाइलों को शायद ही कभी System32 निर्देशिका में संबंधित है। –

+0

हाँ यह एक शायद इसकी वजह से एक चालक प्रणाली के संबंधित भाग system32 फ़ोल्डर में संबंधित है,। मूल एफटीडीआई ड्राइवर डिजाइन के अनुसार कृपया इसे वहां रखें। C: \ Windows \ System32 \ FTChipID.dll मैं कहता हूँ इस वजह अपने पड़ोसी DLLs भी वहाँ सी हैं: ftd2xx.dll – hamish

2

मैं "कोई भी सीपीयू" करने के लिए एक निर्माण का उपयोग कर VS2013 में FTDI नमूना कार्यक्रम 'CSChipID "का निर्माण किया। दो DLL फ़ाइलें "FTChipID.dll" और "FTChipIDNet.dll" बिन निर्देशिका में प्रतिलिपि की गई है, लेकिन मैं जब पहली DLL समारोह बुलाया गया था त्रुटियों प्राप्त करने के लिए जारी रखा, "FTChipID.ChipID.GetNumDevices (संदर्भ numDevices);" फिक्स को निम्नानुसार "x86" में बदल दिया गया है।

बिल्ड - कॉन्फ़िगरेशन प्रबंधक सक्रिय समाधान प्लेटफ़ॉर्म - "x86" नोट: यदि "x86" उपलब्ध नहीं है, तो चुनें- नया ...- "x86" का चयन करने के लिए।

+0

हां धन्यवाद, यह मेरी समस्या का कारण भी था, मैं अपने .net कार्यक्रम का एक डीबग बिल्ड था। जब मैंने विजुअल स्टूडियो x86 और रिलीज कॉन्फ़िगरेशन में पुनर्निर्मित किया तो यह काम करता था। दृश्य स्टूडियो कंपाइलर के साथ यह किसी प्रकार का मुद्दा होना चाहिए। डीएलएल के साथ कोई समस्या नहीं है, क्योंकि मेरे पास पहले से ही मेरे c: \ windows \ फ़ोल्डर में FTchip.dll था, और यह पहले से ही काम कर रहा था। – hamish

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