एक dll क्या है?


90

यह एक बहुत ही नोबी प्रश्न हो सकता है, लेकिन आज के वेब ऐप डेवलपमेंट की दुनिया में कई प्रोग्रामर को dll के साथ बहुत कुछ करने की आवश्यकता नहीं है, और इस प्रकार वे अपने उद्देश्य के बारे में जानने की जहमत नहीं उठाते हैं।

तो एक dll क्या है?

  1. इसका क्या उपयोग है?
  2. यह कैसे काम करता है?
  3. आप एक कैसे बनाएँगे?
  4. किन परिस्थितियों में एक उपयुक्त बना रहा है?

मुझे बताया गया है कि dll का उपयोग कार्यों के पुस्तकालयों को संग्रहीत करने के लिए किया जाता है, लेकिन इससे आगे मुझे ज्यादा जानकारी नहीं है। उम्मीद है कि यहां कोई मुझे बता सकता है, इसलिए मैं आखिरकार यह सोचकर रोक सकता हूं कि मेरी विंडोज निर्देशिका में वे सभी .dll फाइलें क्या कर रही हैं।


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

इस सवाल में एक बहुत लोकप्रिय बनने की क्षमता है
तमस Czinege

1
आपको लगता है? शायद विचारों के लिए लेकिन वोटों की संभावना नहीं ... वैसे भी इसका जवाब पहले ही 4 बार मिल चुका है।
उमर कूहे जी

2
यह तुच्छ
समझ से परे है

3
याह यह देखने योग्य है, लेकिन मुझे वास्तव में इसके बारे में कई अच्छे संक्षिप्त स्पष्टीकरण नहीं मिले हैं, विशेष रूप से एक बनाने के सवाल के लिए और जब एक का उपयोग करना उचित हो।
डैनियल

जवाबों:


55

एक DLL एक गतिशील लिंक लाइब्रेरी है। यह कोड और / या डेटा का एक संग्रह है, जिसका उपयोग कई अनुप्रयोगों (या अन्य पुस्तकालयों / मॉड्यूल) द्वारा किया जा सकता है।

उदाहरण के लिए, फ़ाइलों को संसाधित करने के सामान्य तरीकों के लिए, GUI घटकों के साथ काम आदि पुस्तकालयों में उपलब्ध कराया जाता है, इसलिए कई अनुप्रयोग समान कार्यक्षमता का उपयोग कर सकते हैं। यह न केवल एक ही सामान को कई बार बनाने की आवश्यकता को कम करता है, बल्कि यह भी सुनिश्चित करता है कि जैसे कि आम संवाद अनुप्रयोगों के बीच समान हैं।

पुस्तकालयों को रनटाइम पर लोड किया जा सकता है और इस प्रकार विभिन्न समवर्ती अनुप्रयोगों के बीच साझा किया जाता है। इसे डायनेमिक लिंकिंग कहा जाता है।

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

हालांकि, स्टेटिक लिंकिंग हमेशा एक विकल्प नहीं होता है। उदाहरण के लिए, आप एक .NET अनुप्रयोग को सांख्यिकीय रूप से लिंक नहीं कर सकते। .NET एप्लिकेशन को चलाने के लिए उपयोगकर्ता के पास .NET लाइब्रेरी होनी चाहिए और रनटाइम पर लाइब्रेरीज़ (या उन्हें .NET में कहा जाता है) को लोड किया जाता है।

DLL एप्लिकेशन बनाने के लिए उपयोग किए गए समान टूल द्वारा बनाए जाते हैं। विशिष्ट विवरण उपयोग किए गए उपकरणों पर बहुत निर्भर करते हैं।


उत्तर के लिए धन्यवाद, एक बात मैं सोच रहा हूं कि आवेदन कैसे जानते हैं कि डीएल में क्या कार्य उपलब्ध हैं? Dll ही सभी मशीन कोड सही है? तो सार्वजनिक कार्य हस्ताक्षरों को dll में कैसे उजागर किया जाता है?
डेनियल

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

1
लेकिन स्वत: पूर्ण कैसे पता चलता है कि उपलब्ध कार्य क्या हैं यदि dll सिर्फ मशीन कोड है?
डेनियल

2
मशीनें मशीन कोड पढ़ सकती हैं। DLL में आइकन, स्ट्रिंग्स, फोंट शामिल हो सकते हैं। संभवतया इसमें कहीं न कहीं एक सूची शामिल है।
ग्रांट

1
विजुअल C ++ में डंपबिन नामक एक उपकरण होता है - "डंपबिन / एक्सपोर्ट जो भी हो। जो आपको बताएगा कि फंक्शन और सामान एक्सपोर्ट किए जाते हैं (यानी DLL को लोड करने वाले प्रोग्राम्स के उपयोग के लिए उपलब्ध हैं)।"
ग्रीम पेरो 19

29

DLL = डायनेमिक लिंक लाइब्रेरी

नाम वास्तव में वे क्या पूरा करने के लिए काफी वर्णनात्मक है।

पुस्तकालय

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

संपर्क

आप लाइब्रेरी को एक एप्लिकेशन से "लिंक" कर सकते हैं ताकि लाइब्रेरी में तर्क सीधे आवेदन में संकलित न हो।

गतिशील

पुस्तकालय को ऑन-डिमांड लोड किया जा सकता है। मैमथ एकल EXE को मेमोरी में लोड करने के बजाय, OS केवल आवश्यक भागों को लोड कर सकता है। इसके अलावा अगर एक DLL अनुप्रयोगों के बीच साझा किया जाता है, तो OS यह ऑप्टिमाइज़ कर सकता है कि लाइब्रेरी कैसे लोड होती है और इसे ऐप्स के बीच साझा करें।


10

DLL (डायनेमिक लिंक लाइब्रेरी) फ़ाइलों को छोटे "उप-प्रोग्राम" के रूप में वर्णित किया जा सकता है, जो एक बड़े कार्यक्रम को अच्छी तरह से चलाने में मदद करने के लिए हैं। वे विभिन्न हार्डवेयर और सॉफ़्टवेयर संसाधनों (इसके रन-टाइम सत्र में विभिन्न बिंदुओं पर) को मुख्य निष्पादन योग्य कार्यक्रम से जोड़ने का साधन प्रदान करते हैं, जिस पर वे "as-the-need-arises" आधार पर आधारित होते हैं। यह प्रोग्राम के पहली बार चलने पर कंप्यूटर की रैम (रैंडम एक्सेस मेमोरी) पर मुख्य निष्पादन योग्य प्रोग्राम के साथ करने के लिए सब कुछ लोड करने की आवश्यकता को समाप्त करता है।

DLL द्वारा किए गए सॉफ़्टवेयर संसाधनों में विभिन्न प्रोग्राम फ़ंक्शंस के लिए कोड शामिल हैं जिन्हें प्रोग्राम को चालू रखने के लिए वास्तव में आवश्यक नहीं है: अर्थात्, ऐसे फ़ंक्शन जिन्हें किसी दिए गए कंप्यूटिंग सत्र के दौरान निश्चित समय पर कॉल करने की आवश्यकता होती है और वास्तव में आवश्यकता भी नहीं हो सकती है बिल्कुल बुलाया जाए। उन कार्यों को लोड करना (और किसी दिए गए प्रोग्राम के लिए उनकी काफी संख्या हो सकती है) कंप्यूटर की रैम पर जब प्रोग्राम पहले चलाया जाता है और फिर पूरे सत्र के दौरान उन्हें वहां रखा जाता है, तो रैम स्पेस की बर्बादी होगी - जिसे माना जाता है एक क़िस्त।

एक प्रमुख उन्नति:

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

बातें:

DLL आमतौर पर संस्करण-विशिष्ट होते हैं। जो प्रोग्राम के संस्करण 1 (या एक प्रोग्रामिंग भाषा, जैसा भी मामला हो सकता है) के लिए अच्छी तरह से काम करते हैं, संस्करण 2 के साथ अच्छी तरह से काम नहीं कर सकते हैं। सामान्य नियम यह है कि पुराने संस्करण में DLL काम करने में असमर्थ हैं नए संस्करण के साथ अच्छी तरह से, लेकिन नए संस्करण के वे आम तौर पर कार्यक्रम या प्रोग्रामिंग भाषा के पुराने संस्करण के साथ काफी अच्छी तरह से काम कर सकते हैं।


7

डायनामिकली लिंक्ड लाइब्रेरी।

आपको एक उदाहरण देने के लिए, यदि आपके पास आपके आवेदन में किसी और का DLL लोड है, तो आप उससे प्रोग्रामिंग के बिट्स का उपयोग कर सकते हैं।

आप एक डीएलएल लोड कर सकते हैं जो यादृच्छिक संख्या उत्पन्न करता है जो हमेशा "5" या कुछ के साथ शुरू होता है।

आप प्रोग्राम में आप CrazyDLL.GenerateRandomNumbersSorta () कॉल कर सकते हैं और यह नंबर वापस कर देगा।

एक वास्तविक दुनिया उदाहरण के लिए, मेरे पास DLL है जो 4 टेक्स्टबॉक्स को जोड़ती है (आप इन का उपयोग IP पते टाइप करने के लिए करेंगे) और यह स्वचालित रूप से केवल 256 से कम संख्या को स्वीकार करता है, और पिछले टेक्स्टबॉक्स पर जाने के लिए बैकस्पेस कुंजी को दबाने का काम करता है।

मैंने उस कोड के साथ एक DLL बनाया है, और अब मुझे केवल इतना करना है कि उन सभी IP एड्रेस टेक्स्टबॉक्स कलेक्शन को ड्रैग और ड्रॉप करना है, उस कोड को बार-बार डुप्लिकेट किए बिना।

उसी DLL में IP पतों को हेक्साडेसिमल स्ट्रिंग्स और अन्य उपयोगी कोड में परिवर्तित करने का भी कार्य है।


1

से MSDN लाइब्रेरी :

डायनेमिक-लिंक लाइब्रेरी (DLL) एक ऐसा मॉड्यूल है जिसमें फ़ंक्शंस और डेटा होते हैं जिनका उपयोग किसी अन्य मॉड्यूल (एप्लिकेशन या DLL) द्वारा किया जा सकता है।


1

DLL = डायनेमिक लोड लिंक लाइब्रेरी। जैसा कि आपको बताया गया है, यह मूल रूप से फ़ंक्शन, C ++ क्लासेस, और / या वैश्विक चर का संग्रह है। आप DLL को स्टैटिकली लोड कर सकते हैं (यानी ओएस आपके प्रोग्राम शुरू होने पर इसे अपने आप लोड कर देता है) या डायनामिकली (आपका प्रोग्राम इसे स्पष्ट रूप से लोड करता है), जिस पर डीएलएल के अंदर फंक्शन्स और सामान आपके प्रोग्राम के लिए उपलब्ध हैं।

एक बनाने के लिए एक EXE बनाने के समान है, सिवाय वहाँ एक main()समारोह की जरूरत नहीं है । लिंकर को EXE के बजाय DLL बनाने के लिए लिंक करने के निर्देश हैं।

ऐसा करने का मुख्य कारण यह है कि किसी कोड को किसी एक स्थान पर एनकैप्सुलेट किया जाए और कोड को हर एक में जोड़ने के बजाय इसे कई एक्सई से उपयोग किया जाए।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.