2008-09-23 18 views
144

डीएलएल फाइलें वास्तव में कैसे काम करती हैं? उनमें से बहुत भयानक प्रतीत होता है, लेकिन मुझे नहीं पता कि वे क्या हैं या वे कैसे काम करते हैं।डीएलएल फाइलें वास्तव में क्या हैं, और वे कैसे काम करते हैं?

तो, उनके साथ क्या सौदा है?

उत्तर

209

एक DLL क्या है?

गतिशील लिंक पुस्तकालय (DLL) रों व्यय की तरह हैं लेकिन वे सीधे निष्पादन योग्य नहीं हैं। वे लिनक्स/यूनिक्स में .so फाइलों के समान हैं। यही कहना है, डीएलएल साझा पुस्तकालयों के एमएस के कार्यान्वयन हैं।

DLLs एक EXE कि फ़ाइल स्वरूप में ही एक ही है जैसे इतना कर रहे हैं। EXE और DLL दोनों पोर्टेबल एक्जिक्यूटिव (पीई) फ़ाइल प्रारूप पर आधारित हैं। डीएलएल में COM घटक और .NET पुस्तकालय भी हो सकते हैं।

एक DLL में क्या है?

एक डीएलएल में कार्य, कक्षाएं, चर, यूआई और संसाधन (जैसे आइकन, छवियां, फ़ाइलें, ...) शामिल हैं जो एक EXE, या अन्य DLL उपयोग करता है।

पुस्तकालयों के प्रकार:

लगभग सभी ऑपरेटिंग सिस्टम पर, वहाँ पुस्तकालयों के 2 प्रकार हैं। स्टेटिक पुस्तकालयों और गतिशील पुस्तकालयों। विंडोज़ में फ़ाइल एक्सटेंशन निम्नानुसार हैं: स्टेटिक लाइब्रेरीज़ (.lib) और गतिशील पुस्तकालय (.dll)। मुख्य अंतर यह है कि स्थिर पुस्तकालय संकलन समय पर निष्पादन योग्य से जुड़े होते हैं; जबकि गतिशील लिंक्ड पुस्तकालय रन-टाइम तक जुड़े नहीं होते हैं।

अधिक स्थिर और गतिशील पुस्तकालयों पर:

आप आम तौर पर है, हालांकि आपके कंप्यूटर पर स्थिर पुस्तकालयों दिखाई नहीं दे रहा है क्योंकि एक स्थिर पुस्तकालय एक मॉड्यूल (EXE या DLL) के अंदर सीधे एम्बेडेड है है। एक गतिशील पुस्तकालय एक स्टैंड-अलोन फ़ाइल है।

एक DLL किसी भी समय बदला जा सकता है और केवल रनटाइम पर लोड किया जाता है जब एक EXE स्पष्ट रूप से DLL लोड करता है। EXE के भीतर संकलित होने के बाद एक स्थिर लाइब्रेरी को बदला नहीं जा सकता है। एक डीएलएल को EXE को अपडेट किए बिना व्यक्तिगत रूप से अपडेट किया जा सकता है।

एक DLL लोड हो रहा है:

एक कार्यक्रम स्टार्टअप पर एक DLL लोड करता है, Win32 एपीआई LoadLibrary के माध्यम से, और कब वह दूसरी DLL की निर्भरता है। संसाधन लोड करने के लिए कोई फ़ंक्शन या लोडरसोर्स लोड करने के लिए GetProcAddress का उपयोग करता है।

अतिरिक्त पठन:

आगे पढ़ने के लिए MSDN या Wikipedia की जांच करें। इसके उत्तर के स्रोत भी।

+2

शायद कहीं कहीं आयात lib का उल्लेख करना चाहिए। ठीक है अब मैं चले जाऊंगा। :) –

+2

टिप्पणी एडम के लिए धन्यवाद, सबसे अधिक सही। –

+1

उन लोगों को हटा दिया गया जिन्हें संबोधित किया जा रहा है। मैं इसके लिए अंक कैसे प्राप्त करूं?

1

DLLs (डायनामिक लिंक लाइब्रेरी) एक या अधिक अनुप्रयोग या सेवा के द्वारा प्रयोग किया संसाधन होते हैं। उनमें कक्षाएं, आइकन, स्ट्रिंग्स, ऑब्जेक्ट्स, इंटरफेस, और एक यूआई को छोड़कर डेवलपर को स्टोर करने की ज़रूरत होती है।

+2

वे वास्तव में एक यूआई स्टोर कर सकते हैं और कई कार्यक्रम ऐसा करते हैं। उदाहरण के लिए स्नैप-इन्स। –

4

http://support.microsoft.com/kb/815065

एक DLL एक पुस्तकालय है कि कोड और डेटा है कि एक ही समय में एक से अधिक एक कार्यक्रम के द्वारा इस्तेमाल किया जा सकता शामिल हैं। उदाहरण के लिए, विंडोज ऑपरेटिंग सिस्टम में, Comdlg32 DLL सामान्य संवाद बॉक्स से संबंधित फ़ंक्शन करता है। इसलिए, प्रत्येक प्रोग्राम कार्यक्षमता का उपयोग कर सकता है जो में इस खुले संवाद बॉक्स को लागू करने के लिए इस DLL में निहित है। यह कोड पुन: उपयोग और कुशल स्मृति उपयोग को बढ़ावा देने में मदद करता है।

डीएलएल का उपयोग करके, एक प्रोग्राम अलग-अलग घटकों में मॉड्यूलर किया जा सकता है। उदाहरण के लिए, एक लेखा प्रोग्राम मॉड्यूल द्वारा बेचा जा सकता है। प्रत्येक मॉड्यूल हो सकता है जो उस मॉड्यूल को स्थापित होने पर समय पर मुख्य प्रोग्राम में लोड किया गया हो। क्योंकि मॉड्यूल अलग हैं, प्रोग्राम का लोड समय तेज है, और मॉड्यूल केवल तब लोड होता है जब कार्यक्षमता का अनुरोध किया जाता है।

इसके अतिरिक्त, अद्यतन प्रोग्राम के अन्य हिस्सों को प्रभावित किए बिना प्रत्येक मॉड्यूल पर लागू होते हैं। उदाहरण के लिए, आपके पास पेरोल प्रोग्राम हो सकता है, और कर दरें प्रत्येक वर्ष बदलती हैं। जब ये परिवर्तन को एक डीएलएल में अलग कर दिया जाता है, तो आप को को पूरे प्रोग्राम को फिर से बनाने या स्थापित करने की आवश्यकता के बिना एक अद्यतन लागू कर सकते हैं।

http://en.wikipedia.org/wiki/Dynamic-link_library

8

DLL फ़ाइलें एक निर्यात तालिका जो जो बुला कार्यक्रम के द्वारा देखा जा सकता है प्रतीकों की एक सूची है होते हैं। प्रतीकों आमतौर पर C calling convention (__stcall) के साथ काम करते हैं। निर्यात तालिका में फ़ंक्शन का पता भी शामिल है।

इस जानकारी के साथ, कॉलिंग प्रोग्राम तब डीएलएल के भीतर कार्यों को कॉल कर सकता है, भले ही इसे संकलन समय पर डीएलएल तक पहुंच न हो।

Introducing Dynamic Link Libraries में कुछ और जानकारी है।

6

डीएलएल (गतिशील लिंक पुस्तकालय) और एसएलएस (साझा पुस्तकालय, यूनिक्स के तहत समकक्ष) केवल निष्पादन योग्य कोड के पुस्तकालय हैं जिन्हें लोड समय पर निष्पादन योग्य में गतिशील रूप से जोड़ा जा सकता है।

स्थिर पुस्तकालयों को संकलन समय पर निष्पादन योग्य में डाला जाता है और उस बिंदु से तय किया जाता है। वे निष्पादन योग्य के आकार को बढ़ाते हैं और साझा नहीं किए जा सकते हैं।

गतिशील पुस्तकालयों निम्न लाभ हैं:

1/वे रन टाइम पर लोड किए गए हैं बजाय समय तो वे निष्पादन की स्वतंत्र रूप से अद्यतन किया जा सकता (उन सभी फैंसी खिड़कियों और संवाद बॉक्स आप Windows में देखने से आते हैं संकलन डीएलएल इसलिए आपके आवेदन के स्वरूप और अनुभव को फिर से लिखने के बिना बदल सकते हैं)।

2/क्योंकि वे स्वतंत्र हैं, कोड को कई निष्पादन योग्यों में साझा किया जा सकता है - यदि आप एकल डीएलएल के साथ 100 ऐप्स चला रहे हैं, तो स्मृति स्मृति में केवल डीएलएल की एक प्रति हो सकती है।

उनका मुख्य नुकसान लाभ # 1 है - डीएलएल बदलते हुए आपके आवेदन को बदलने से आपका आवेदन काम करना बंद कर सकता है या विचित्र तरीके से व्यवहार करना शुरू कर सकता है। डीएलएल संस्करण को विंडोज के तहत बहुत अच्छी तरह से प्रबंधित नहीं किया जाना चाहिए और इससे विचित्र रूप से नामित "डीएलएल नरक" होता है।

9

मान लें कि आप एक निष्पादन योग्य बना रहे हैं जो पुस्तकालय में पाए गए कुछ कार्यों का उपयोग करता है।

यदि आप जिस लाइब्रेरी का उपयोग कर रहे हैं वह स्थिर है, तो लिंकर सीधे इन लाइब्रेरी से ऑब्जेक्ट कोड कॉपी करेगा और उन्हें निष्पादन योग्य में डालेगा।

अब अगर यह निष्पादन योग्य चलाया जाता है तो इसमें हर चीज की आवश्यकता होती है, इसलिए निष्पादन योग्य लोडर बस इसे स्मृति में लोड करता है और इसे चलाता है।

पुस्तकालय गतिशील है लिंकर वस्तु कोड डालने नहीं होगा बल्कि यह एक ठूंठ जो मूल रूप से कहना है कि यह समारोह इस स्थान पर इस DLL में स्थित है डाल देंगे।

अब यह निष्पादन योग्य है, तो निष्पादन योग्य के बिट्स गायब हैं (यानी स्टब्स) इसलिए लोडर गुमशुदा स्टब्स को निष्पादन योग्य निष्पादन योग्य माध्यम से चला जाता है। केवल सभी स्टब्स को हल करने के बाद निष्पादन योग्य को चलाने की अनुमति दी जाएगी।

कार्रवाई में इसे देखने के लिए DLL को हटाएं या नाम बदलें और देखें कि जब आप निष्पादन योग्य चलाने की कोशिश करते हैं तो लोडर एक लापता DLL त्रुटि की रिपोर्ट कैसे करेगा।

इसलिए नाम डायनामिक लिंक लाइब्रेरी, लिंकिंग प्रक्रिया के कुछ हिस्सों को निष्पादन योग्य लोडर द्वारा रन टाइम पर गतिशील रूप से किया जा रहा है।

एक एक अंतिम ध्यान दें, यदि आप DLL से लिंक नहीं करते तो कोई स्टब्स लिंकर द्वारा सम्मिलित किया जाएगा, लेकिन Windows अभी भी GetProcAddress एपीआई है कि आप एक DLL समारोह प्रवेश बिंदु लंबे निष्पादित लोड करने की अनुमति प्रदान करता है निष्पादन योग्य शुरू होने के बाद।

31

डीएलएल क्या है?

डीएलएल फाइलें बाइनरी फाइलें हैं जिनमें निष्पादन योग्य कोड और छवियों जैसे संसाधन आदि शामिल हो सकते हैं। अनुप्रयोगों के विपरीत, इन्हें सीधे निष्पादित नहीं किया जा सकता है, लेकिन एक एप्लिकेशन उन्हें लोड करेगा और जब उन्हें आवश्यक हो (या सभी स्टार्टअप के दौरान)।

क्या वे महत्वपूर्ण हैं?

अधिकांश एप्लिकेशन स्टार्टअप पर आवश्यक DLL फ़ाइलों को लोड करेंगे। यदि इनमें से कोई भी नहीं मिला है तो सिस्टम प्रक्रिया शुरू करने में सक्षम नहीं होगा।

DLL फ़ाइलों अन्य DLL फ़ाइलों

उसी तरह है कि एक आवेदन पत्र एक DLL फ़ाइल, एक DLL फ़ाइल अन्य DLL फ़ाइलों पर ही निर्भर हो सकता है की आवश्यकता है की आवश्यकता हो सकती। यदि निर्भरता की श्रृंखला में इन डीएलएल फाइलों में से कोई एक नहीं मिला है, तो एप्लिकेशन लोड नहीं होगा। यह Dependency Walker जैसे किसी भी निर्भरता वॉकर टूल का उपयोग करके आसानी से डीबग किया गया है।

सिस्टम फ़ोल्डर

प्रणाली से अधिकांश कार्यक्षमता DLL फ़ाइलों के रूप में एक उपयोगकर्ता कार्यक्रम के संपर्क में है के रूप में वे साझा करने कोड/संसाधनों का एक मानक रूप है में उनमें से बहुत सारे हैं। प्रत्येक कार्यक्षमता को अलग-अलग DLL फ़ाइलों में अलग रखा जाता है ताकि केवल आवश्यक DLL फ़ाइलों को लोड किया जा सके और इस प्रकार सिस्टम पर स्मृति बाधाओं को कम किया जा सके।

इंस्टॉल किए गए एप्लिकेशन भी भी शारीरिक रूप से कार्य को अलग करने जैसा कि ऊपर बताया का एक रूप हो जाता है DLL फ़ाइलों

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

DLL नरक

बहरहाल, समय प्रणाली के उन्नयन पर अक्सर अन्य कार्यक्रमों टूट जाता है जब वहाँ साझा DLL फ़ाइलों और कार्यक्रम है कि उन्हें आवश्यकता के बीच एक संस्करण बेमेल है। इस समस्या को हल करने के लिए सिस्टम चेकपॉइंट्स और डीएलएल कैश इत्यादि एम $ से पहल की गई हैं। .NET प्लेटफ़ॉर्म को इस समस्या का सामना नहीं करना पड़ सकता है।

हम कैसे जानते हैं कि एक डीएलएल फ़ाइल के अंदर क्या है?

आप जो केवल दिखाई नहीं देंगे क्या सार्वजनिक रूप से दिखाई कार्यों (निर्यात के रूप में जाना जाता है) DLL फ़ाइलों के अंदर निहित हैं और यह भी क्या अन्य DLL फ़ाइलों यह की आवश्यकता है और जो उन लोगों से निर्यात DUMPBIN या निर्भरता वाकर की तरह एक बाहरी उपकरण का उपयोग करने के लिए है डीएलएल फाइलें इस डीएलएल फाइल पर निर्भर है।

हम उन्हें कैसे बनाते/उपयोग करते हैं?

अपने विक्रेता से प्रोग्रामिंग दस्तावेज़ देखें। सी ++ के लिए, एमएसडीएन में LoadLibrary देखें।

+1

कृपया इस वाक्य को पूरा करें ('" .NET प्लेटफ़ॉर्म को इस समस्या का सामना नहीं करना पड़ सकता है। "') क्यों। धन्यवाद। – Jogi

+0

@RehanKhan .NET Framework v2.0 से शुरू हो रहा है, रनटाइम केवल एक .NET संस्करण <= वर्तमान में लोड किए गए रनटाइम + के साथ संकलित असेंबल्स लोड करेगा। .NET भी कैश असेंबली लोड करने में विफल प्रयासों + अगर पिछली कॉल पहले से ही एक असेंबली स्थित है, CL रनटाइम पहले से लोड की गई असेंबली का उपयोग करेगा। सब कुछ, मुझे लगता है कि यह कहना बेहतर होगा कि उन्होंने प्रोग्राम के रनटाइम को लोड करने वाले डीएलएल पर भारी भारी प्रतिबंध लगाकर समस्या हल कर दी है (इससे पहले कि वह हार जाए और आपकी मदद मांगे)। –

2

डीएलएल एक फ़ाइल एक्सटेंशन & विंडोज प्रोग्राम के लिए एकाधिक कोड और प्रक्रियाओं को रखने के लिए उपयोग की जाने वाली "गतिशील लिंक लाइब्रेरी" फ़ाइल प्रारूप के रूप में जाना जाता है। सॉफ्टवेयर & गेम्स डीएलएल फाइलों के आधार पर चलता है; डीएलएल फाइलें बनाई गई थी ताकि एकाधिक एप्लिकेशन एक ही समय में अपनी जानकारी का उपयोग कर सकें।

यदि आप डीएलएल फाइलों के बारे में अधिक जानकारी प्राप्त करना चाहते हैं या किसी भी त्रुटि का सामना करना चाहते हैं तो निम्न पोस्ट पढ़ें। https://www.bouncegeek.com/fix-dll-errors-windows-586985/

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