2009-08-07 14 views
25

है इसलिए मैं एक हार्डवेयर यादृच्छिक संख्या जेनरेटर के लिए एक एसडीके का उपयोग कर रहा हूं जो इसके साथ बातचीत करने के लिए PsyREG.dll नामक एक डीएल प्रदान करता है, साथ ही कुछ सी # स्रोत डीएल से विधियों का उपयोग करने के लिए भी प्रदान करता है।DllNotFoundException, लेकिन DLL

यह अतीत में काम करता है, लेकिन किसी भी तरह से यह काम करना बंद कर दिया है। मेरे हाथ थोड़ा बंधे हुए हैं क्योंकि मुझे इस समय डिवाइस में वास्तव में डिवाइस तक पहुंच नहीं है, इसलिए मैं बहुत सी चीजों की कोशिश नहीं कर सकता ...

हालांकि, यहां अजीब चीज है। डीएलएल वहां है, वही जगह हमेशा यह रही है। वास्तव में Ahd File.Exists ("PsyREG.dll") सत्य लौटाता है, और मैंने दो बार जांच की है और यह वही तरीका है जिसने प्रदत्त सी # स्रोत आयात किया है, उदा। [DllImport ("PsyREG.dll")]।

कोई विचार?

उत्तर

34

शायद यह डीएलएल में कुछ निर्भरताएं हैं जिन्हें वे पंजीकृत नहीं हैं या आपके आवेदन के उसी फ़ोल्डर में नहीं हैं।

+0

धन्यवाद, कि यह किया गया था। कुछ अन्य चीजें जरूरी थीं, लेकिन कुछ कारणों से मैंने यह जांचने के लिए नहीं सोचा था (इस तथ्य सहित कि यह कहा गया है कि यह PsyREG.dll लोड नहीं कर सका, एक अलग फ़ाइल नहीं) – Asmor

+1

इस तरह के टाइम्स हैं जब मैं परावर्तक तोड़ो। यह आपको निर्भरता दिखा सकता है। विशेष रूप से, यह आपको दिखा सकता है कि कौन से नहीं पाए जाते हैं। –

+0

वास्तव में? क्या परावर्तक अप्रबंधित निर्भरताओं को ढूंढता है? वह विकल्प कहां है? – erikkallen

1

शायद आपको यह देखने के लिए जांच करनी चाहिए कि क्या आप डीएल के विशिष्ट उत्पाद संस्करण की अपेक्षा कर रहे हैं, और यह सुनिश्चित कर लें कि उत्पाद संस्करण अभी भी सही तरीके से मेल खाते हैं।

4
+0

इस ऐप ने मेरे लिए काम किया है। –

+0

ठंडा ... उस टूल ने तैनाती करते समय मुझे कई इंस्टॉल समस्याओं का समाधान करने में मदद की। – cbuteau

0

में समस्याग्रस्त प्रणाली मैं अपने DLL के में से एक के संबंध में एक ही अपवाद के साथ काम कर रहा था पर (यह A कॉल)। सी # क्रैश हो रहा था क्योंकि उसने दावा किया कि यह डीएलएल (A) नहीं मिला (जबकि यह निष्पादन योग्य के समान फ़ोल्डर में था)।

यह पता चला कि यह समस्या A के कारण किसी अन्य डीएलएल पर निर्भरता है (इसे B पर कॉल करें)। B पथ में नहीं था इसलिए A इसे आवश्यक होने पर लोड नहीं कर सका। चूंकि B को अन्य डीएलएल के पूरे समूह की आवश्यकता थी, तो समाधान B की निर्देशिका PATH पर्यावरण चर में जोड़ने के लिए था।

यह कैसे कह रही है कि A नहीं पाया जाता है जब वास्तव B में नहीं मिला था त्रुटि के साथ सी # दुर्घटनाओं ...

+0

क्या आप समझा सकते हैं कि समाधान बी के निर्देशिका को पथ पर्यावरण चर में जोड़ने के लिए थोड़ा सा हिस्सा था? मैं वर्तमान में लगभग एक ही समस्या के साथ struggeling कर रहा हूँ, केवल अंतर यह है कि मेरा डीएल अन्य डीएल के बजाय कुछ * .so फाइल चाहता है। – Stefan

+0

@Stefan मैं लिनक्स टर्मिनल में विश्वास करता हूं कि आप अपने पाथ पर्यावरण परिवर्तक में 'आपका-SO-FILE-PATH' निर्देशिका जोड़ने के लिए 'PATH = $ PATH: आपका-SO-FILE-PATH' निर्यात करेंगे। इस तरह, जब आपकी 'so' फ़ाइल को लोड करने की आवश्यकता होती है, तो PATH द्वारा निर्दिष्ट पथ को' so' फ़ाइल 'खोजने के लिए खोजा जाएगा। – M2X

+0

धन्यवाद, मैंने इसे इस तरह से आजमाया है लेकिन यह वास्तव में काम नहीं करता है। मैंने अपने डीएल को '/ usr/lib' निर्देशिका में स्थानांतरित करने के लिए कहीं और पढ़ा है (हां, यह वास्तव में एक लिनक्स सिस्टम है) और यह बिना किसी कॉन्फ़िगरेशन के काम करता है – Stefan

0

मैं इस समस्या का सामना किया और साथ हल दिलचस्प है निम्नलिखित:

निर्भरता नहीं है msvcr90.dll पर अगर आप/MD के अंतर्गत संकलित करते हैं। इसके बजाय/MT के साथ कोड संकलित करने का प्रयास करें।

Project properties>C/C++>Code Generation>Runtime Library: /MT

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