2011-08-16 2 views
34

है I मैं सी # में ओपनसीवी के साथ एक प्रोजेक्ट का निर्माण कर रहा हूं। इसे cvextern.dll नामक एक डीएलएल फ़ाइल की आवश्यकता है। लेकिन, इस फ़ाइल को संदर्भ के रूप में जोड़ते समय, यह संदेश प्रकट होता है: -मुझे इसके लिए एक समाधान चाहिए: कृपया सुनिश्चित करें कि फ़ाइल पहुंच योग्य है और यह एक वैध असेंबली या COM घटक

एक संदर्भ "cvextern.dll" जोड़ा नहीं जा सकता है, कृपया सुनिश्चित करें कि फ़ाइल पहुंच योग्य है और यह एक वैध असेंबली या COM है घटक।

मैं खोज से थक, मुझे लगता है कि समस्या

+1

क्या आपने विशिष्ट उपयोगकर्ता के लिए सभी अनुमतियां (पढ़ने/निष्पादित करने) के रूप में फ़ाइल 'पहुंच योग्य' है, तो क्या आपने सत्यापित किया था। अगर आप इंटरनेट से डाउनलोड करते हैं तो आपको इसे 'अनब्लॉक' करने की आवश्यकता हो सकती है। – YetAnotherUser

+1

फ़ाइल एक मूल DLL है जिसका अर्थ है कि आप इसे संदर्भ जोड़ें के माध्यम से .NET प्रोजेक्ट में नहीं जोड़ सकते हैं ... आप DllImport के माध्यम से उपयोग कर सकते हैं (http://msdn.microsoft.com/en-us/library/system देखें .runtime.interopservices.dllimportattribute.aspx) – Yahia

+0

संभावित डुप्लिकेट [डीएल के संदर्भ को जोड़ा नहीं जा सका] (https://stackoverflow.com/questions/3456758/a-reference-to-the-dll-could-not -बे-जोड़ा) – STF

उत्तर

18

फ़ाइल एक देशी DLL आप ऐड के माध्यम से एक नेट परियोजना के लिए यह नहीं जोड़ सकते हैं, जिसका मतलब है है के लिए एक समाधान के लिए खोज में पिछले 2 दिन बिताए संदर्भ ... आप इसे DllImport के माध्यम से उपयोग कर सकते हैं (http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx देखें)

+0

ट्यूटोरियल वास्तविकता की तरह नहीं दिखता .. क्या दृश्य स्टूडियो का संस्करण प्रभावित करता है? मैं माइक्रोसॉफ्ट विजुअल स्टूडियो 2008 एक्सप्रेस संस्करण का उपयोग कर रहा हूं .. :) –

+3

AFAIK वास्तव में कोई फर्क नहीं पड़ता ... हालांकि DLL या तो परियोजना निर्देशिका में या "वैश्विक रूप से सुलभ" (system32 ...) – Yahia

+1

पर होना चाहिए, लेकिन यदि आप प्रोजेक्ट में इसका कोई संदर्भ नहीं जोड़ सकते हैं तो आप उस बाहरी डीएल पर कॉल कैसे डिबग करते हैं? –

3

सुनिश्चित करें कि आपके आवेदन के निर्माण के दौरान आवश्यक डीएलएस को बिन फ़ोल्डर में निर्यात किया गया है (या मैन्युअल रूप से कॉपी किया गया है)।

+2

कोड से आगे बढ़ने देगा, क्योंकि मैं इसे संदर्भ के रूप में नहीं जोड़ सका लेकिन एक अन्य डीएलएल को इसकी आवश्यकता थी। बस संकलन समय पर प्रतिलिपि काम किया। – Binarian

8

मेरे लिए काम किया है:

संक्षिप्त उत्तर

रन कमांड लाइन के माध्यम से निम्नलिखित (cmd):

TlbImp.exe cvextern.dll  //where cvextern.dll is your dll you want to fix. 

और एक वैध dll आप के लिए बनाया जाएगा।

लंबे समय तक जवाब

  • ओपन cmd

  • TLBIMP.exe का पता लगाएं। शायद सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin में स्थित है। आप नहीं मिल रहा है, तो इससे आपके रूट फ़ोल्डर (सी पर जाएं: \ या डी :) और चलाएँ:

    dir tlbimp.exe /s    //this will locate the file. 
    
  • भागो TLBIMP.exe और इसके पीछे अपने dll डाल दिया। उदाहरण: यदि आप cllxtern.dll dll है। आप चला सकते हैं:

    TlbImp.exe cvextern.dll 
    
  • tlbimp.exe के फ़ोल्डर में एक नया डीएल बनाया गया है। आप इसे प्रोजेक्ट में संदर्भ के रूप में उपयोग कर सकते हैं।
+0

एक आकर्षण की तरह काम किया! व्यवस्थापक अधिकारों के साथ cmd का उपयोग करना सुनिश्चित करें। – Christian

+0

ऐसी कोई एक्सई जीत 8.1 64 बिट – MonsterMMORPG

+3

'इनपुट प्रकार मान्य प्रकार लाइब्रेरी नहीं है' विजुअल स्टूडियो कमांड प्रॉम्प्ट –

16

मेरे मामले में मैं dll रजिस्टर करने के लिए किया था -> खुला cmd व्यवस्थापक अधिकार और प्रकार के साथ (कंसोल): regsvr32 "foo.dll"

+0

यह जवाब शायद इस त्रुटि का 95% कर सकता है यह cmd -> 'regsvr32 "C: \ blah \ foo.dll" – SSpoke

1

मैं एक ही कार्यक्रम था, मुझे आशा है कि यह मदद कर सकता है।

मैं आपके विंडोज 7 का उपयोग कर रहा हूं, कमांड प्रॉम्प्ट खोलें-> व्यवस्थापक के रूप में चलाएं। अपना < ...>। डीएलएल पंजीकृत करें।

व्यवस्थापक के रूप में क्यों चलते हैं, तो आप अपने < ...>। डीएल को विंडोज स्टार्ट पर रन का उपयोग करके पंजीकृत कर सकते हैं, लेकिन फिर भी आपका डीएल केवल उपयोगकर्ता के रूप में चलाया जाता है, यहां तक ​​कि आपका खाता व्यवस्थापक भी है।

अब आप अपना < ...> जोड़ सकते हैं।परियोजना पर dll>TheMattster से जवाब के लिए Reference- जोड़ें>

धन्यवाद

1

देखो here ब्राउज़ करें। मैंने इसे लागू किया और यह एक आकर्षण की तरह काम किया। संक्षेप में, उनका समाधान COM Dll को प्रोजेक्ट के संसाधन के रूप में जोड़ने का सुझाव देता है (इसलिए अब यह प्रोजेक्ट के डीएल में संकलित होता है), और पहले रन पर इसे एक फ़ाइल में लिखें (यानी डीएल फाइल जो मैं पहले में चाहता था जगह)।

मेरी समस्या यह थी कि न केवल मुझे अपने प्रोजेक्ट में COM dll का उपयोग करना पड़ा, मुझे इसे क्लिकऑन का उपयोग करके अपने ऐप के साथ भी तैनात करना पड़ा, और मेरे प्रोजेक्ट में इसका संदर्भ जोड़ने में सक्षम होने के बाद उपरोक्त समाधान व्यावहारिक रूप से है काम करने वाला एकमात्र ऐसा।

0

'इसे' को cllxtern.dll नामक एक डीएलएल फ़ाइल की आवश्यकता होती है। 'यह' आपकी स्वयं की सीएस फ़ाइल या कुछ अन्य तृतीय पक्ष डीएल हो सकता है जिसे आप अपनी परियोजना में उपयोग कर रहे हैं।

अपने स्वयं के सीएस फ़ाइल में देशी डीएलएस को कॉल करने के लिए, अपनी परियोजना की रूट \ lib निर्देशिका में डीएलएल कॉपी करें और इसे मौजूदा आइटम के रूप में जोड़ें। (जोड़ें- मौजूदा आइटम) और सही स्थान के साथ Dllimport का उपयोग करें।

तीसरे पक्ष के लिए, मूल पुस्तकालय को उस फ़ोल्डर में कॉपी करें जहां तृतीय पक्ष लाइब्रेरी रहता है और इसे मौजूदा आइटम के रूप में जोड़ें।

बिल्डिंग के बाद सुनिश्चित करें कि बिल्ड फ़ोल्डर में आवश्यक डीएल दिखाई दे रहे हैं। कुछ मामलों में यह बिल्ड फ़ोल्डर में प्रकट नहीं हो सकता है या प्रतिस्थापित नहीं हो सकता है। मैन्युअल रूप से बिल्ड फ़ोल्डर हटाएं और फिर से निर्माण करें।

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

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