2012-07-30 13 views
5

नहीं पाया जा सका जब मैंLoadLibrary project.dll विफल रहा। निर्दिष्ट मॉड्यूल

regsvr32 project.dll 

मैं इस त्रुटि मिल रही है साथ मेरे सी ++/ATL परियोजना के 32 बिट संस्करण रजिस्टर करने के लिए प्रयास करें:

LoadLibrary("project.dll") failed - The specified module could not be found 

project.dll है मेरा डीएल विजुअल स्टूडियो 10 पर एटीएल का उपयोग करके बनाया गया है।

64 बिट संस्करण ठीक पंजीकृत है।

मुझे क्या याद आ रही है?

+0

project.dll कहां है? उसी हिरण में जहां आप इस आदेश का आह्वान करते हैं? पाथ में? – stijn

+0

हाँ यह एक ही निर्देशिका में है (अन्यथा मुझे यह कहने में कोई त्रुटि मिलेगी कि ऐसी कोई फ़ाइल मौजूद नहीं है!) – Danield

+2

फिर निर्भरता वॉकर में डीएल खोलें और देखें कि कौन से डीएल गुम हैं – stijn

उत्तर

5

मैंने यह वही त्रुटि देखी है, लेकिन समाधान पुनर्वितरण योग्य स्थापित नहीं कर रहा था। Depend.exe के अनुसार सिस्टम पर सभी निर्भर DLL सिस्टम पर मौजूद थे।

मेरे मामले में, का आइकन KERNEL32.DLL थोड़ा लाल रंग का था। Depends.exe ने बहुत स्पष्टीकरण नहीं दिया, लेकिन चारों ओर खोदने से पता चला कि आयातित कार्यों में से एक सिस्टम पर डीएलएल से गायब था। आयातित कार्यों को देखने के लिए, ट्रीव्यू पर निर्भर DLL का चयन करें और दाएं पैनल पर आयात देखें। लापता आयात के लाल आइकन देखने के लिए पीआई कॉलम द्वारा ऑर्डर करें।

Seeing the missing import

मेरे मामले में, लापता समारोह एक समारोह है कि मेरे दु: खी लक्ष्य ऑपरेटिंग सिस्टम, Windows XP पर मौजूद नहीं था था। चूंकि मेरे कार्यक्रम सीधे इस समारोह पर निर्भर नहीं किया, मैं #define ing अपने प्रोजेक्ट में निम्नलिखित के साथ भाग प्राप्त करने में सक्षम था:

#define WINVER 0x0501 
#define _WIN32_WINNT 0x0501 

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

यह योग करने के लिए, यह त्रुटि संदेश निम्न समस्याओं के कारण हो सकते हैं:

  1. DLL फ़ाइल नहीं मिला था या पढ़ा नहीं जा सका। कमांड लाइन की जांच करें।
  2. कुछ आश्रित डीएलएल नहीं मिला या पढ़ा नहीं जा सका।
  3. कुछ आयात डीएलएल से कुछ आयात गायब हैं। यदि ये सिस्टम डीएलएल हैं, तो आप संभवतः विंडोज़ के गलत संस्करण को लक्षित कर रहे हैं। यदि ये गैर-सिस्टम डीएलएल हैं, तो आपको उनके और उनके सभी निर्भरताओं के नए संस्करण स्थापित करने की आवश्यकता है।

1 .: अलावा IESHIMS.DLL और WER.DLL से जाहिरा तौर पर इस वर्ष उपकरण में एक बग है।
2 .: या वास्तव में, किसी विशेष सिस्टम पर DLLs को लोड करने में कोई समस्या

+0

हालांकि मैं काम नहीं कर रहा हूं उस परियोजना पर अब और इसकी जांच करने की क्षमता नहीं है, यह इस समस्या से संपर्क करने का सही तरीका प्रतीत होता है। +1 - धन्यवाद! – Danield

2

त्रुटि विवरण इस मामले में भ्रामक है। सिस्टम आपके डीएलएल (project.dll) को पाता है लेकिन आपके डीएलएल की एक (या अधिक) निर्भरता गायब हो सकती है।

+2

निर्भरता वॉकर के साथ अपने डीएलएल के अपने (32 बिट संस्करण) का निरीक्षण करें (http://www.dependencywalker.com/) – mox

+0

में मदद कर सकता है मैंने कोशिश की, और इससे पता चला कि कुछ डीएलएस गायब थे, लेकिन जब मैंने इन डीएलएस को डाउनलोड किया और उन्हें परियोजना डीएल के समान निर्देशिका में जोड़ा - प्रत्येक बार निर्देशिका वॉकर मिला – Danield

+1

गायब होने वाले डीएलएस का एक नया सेट वास्तव में, कुछ छवियों में उप-निर्भरताएं हैं! Windows लोडर (आपके केस रजिस्टर में) एक एप्लिकेशन शुरू होने से पहले सभी स्थिर निर्भरताओं (प्रत्यक्ष और अप्रत्यक्ष) को हल किया जाना चाहिए। – mox

1

मैं सिर्फ

Microsoft Visual C++ 2010 Redistributable Package 

स्थापित किया है और अब मैं dll स्थापित कर सकते हैं।

हालांकि यह काम करता है, मैं इससे बहुत खुश नहीं हूं, क्योंकि मैं अपने डीएल के लिए काम करने के लिए इस पैकेज को क्लाइंट पर स्थापित नहीं करना चाहता हूं।

+0

मैंने अभी देखा है कि मैं जिस इंस्टालर का उपयोग कर रहा हूं, उस पैकेज को एक शर्त के रूप में शामिल करने का विकल्प है - इसलिए इंस्टॉलर जाकर पैकेज डाउनलोड करेगा यदि उपयोगकर्ता पहले से ही स्थापित नहीं है – Danield

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