एक DLL (डायनेमिक लिंक लाइब्रेरी) कार्यों के एक साझा पुस्तकालय के रूप में कार्य करता है जिसे कई अनुप्रयोगों और अन्य DLL द्वारा कॉल किया जा सकता है। डेल्फी आपको देता है DLL बनाएं और उपयोग करें ताकि आप इन कार्यों को वसीयत में कह सकें। हालाँकि, आपको कॉल करने से पहले इन रूटीन को आयात करना होगा।
डीएलएल से निर्यात किए गए कार्यों को दो तरीकों से आयात किया जा सकता है - या तो बाहरी प्रक्रिया या फ़ंक्शन (स्थिर) की घोषणा करके या डीएलएल विशिष्ट एपीआई फ़ंक्शन (डायनामिक) के लिए सीधे कॉल द्वारा।
आइए एक साधारण DLL पर विचार करें। नीचे "Circle.dll" के लिए एक फ़ंक्शन को निर्यात किया गया है, जिसे "CircleArea" कहा जाता है, जो दिए गए त्रिज्या का उपयोग करके एक सर्कल के क्षेत्र की गणना करता है:
एक बार आपके पास Circle.dll है, तो आप अपने एप्लिकेशन से निर्यात किए गए "CircleArea" फ़ंक्शन का उपयोग कर सकते हैं।
स्थैतिक लोड हो रहा है
किसी प्रक्रिया या कार्य को आयात करने का सबसे सरल तरीका यह है कि इसे बाहरी निर्देश का उपयोग करके घोषित किया जाए:
यदि आप इस घोषणा को एक इकाई के इंटरफ़ेस भाग में शामिल करते हैं, तो एक बार प्रोग्राम शुरू होने पर Circle.dll लोड हो जाता है। कार्यक्रम के निष्पादन के दौरान, फ़ंक्शन सर्कलएरिया उन सभी इकाइयों के लिए उपलब्ध है जो उस इकाई का उपयोग करते हैं जहां उपरोक्त घोषणा है।
गतिशील लोड हो रहा है
आप Win32 एपीआई सहित प्रत्यक्ष कॉल के माध्यम से एक पुस्तकालय में दिनचर्या का उपयोग कर सकते हैं LoadLibrary, FreeLibrary, तथा GetProcAddress. ये फ़ंक्शन Windows.pas में घोषित किए गए हैं।
यहां बताया गया है कि गतिशील लोडिंग का उपयोग करके CircleArea फ़ंक्शन को कैसे कॉल किया जाए:
डायनेमिक लोडिंग का उपयोग करके आयात करते समय, DLL को लोडलिफ्टर्स पर कॉल करने तक लोड नहीं किया जाता है। पुस्तकालय द्वारा उतार दिया जाता है FreeLibrary पर कॉल करें.
स्थैतिक लोडिंग के साथ, DLL को लोड किया जाता है और कॉलिंग एप्लिकेशन के आरंभीकरण अनुभागों को निष्पादित करने से पहले इसके प्रारंभ अनुभाग निष्पादित होते हैं। यह डायनेमिक लोडिंग के साथ उलटा है।
क्या आपको स्टेटिक या डायनेमिक का उपयोग करना चाहिए?
स्थैतिक और गतिशील डीएलएल लोडिंग के फायदे और नुकसान पर एक सरल नज़र डालें:
स्थैतिक लोड हो रहा है
पेशेवरों:
- शुरुआती डेवलपर के लिए आसान; कोई "बदसूरत" नहीं एपीआई कॉल.
- कार्यक्रम शुरू होने पर DLL को केवल एक बार लोड किया जाता है।
विपक्ष:
- यदि कोई DLL अनुपलब्ध है या नहीं मिल सकता है, तो अनुप्रयोग प्रारंभ नहीं होगा। इस तरह एक त्रुटि संदेश दिखाई देगा: "यह एप्लिकेशन प्रारंभ करने में विफल रहा है क्योंकि 'लापता .ll' नहीं मिला था। अनुप्रयोग पुनर्स्थापित कर इस समस्या का हल किया जा सकता है"। डिज़ाइन के अनुसार, स्थिर लिंकिंग के साथ DLL सर्च ऑर्डर में वह निर्देशिका शामिल है जिसमें से एप्लिकेशन है लोड, सिस्टम निर्देशिका, विंडोज निर्देशिका, और निर्देशिका PATH वातावरण में सूचीबद्ध है चर। ध्यान दें कि विभिन्न विंडोज संस्करणों के लिए खोज क्रम भिन्न हो सकता है। हमेशा उस निर्देशिका में सभी DLL की अपेक्षा करें जहां कॉलिंग एप्लिकेशन है।
- सभी DLL लोड होने के बाद भी अधिक मेमोरी का उपयोग किया जाता है, भले ही आप कुछ .functions का उपयोग न करें
गतिशील लोड हो रहा है
पेशेवरों:
- आप अपने कार्यक्रम को तब भी चला सकते हैं, जब इसमें इस्तेमाल होने वाले कुछ पुस्तकालय मौजूद नहीं हों।
- डीएलएल के बाद से छोटी मेमोरी खपत केवल जरूरत पड़ने पर उपयोग की जाती है।
- आप DLL के लिए पूर्ण पथ निर्दिष्ट कर सकते हैं।
- मॉड्यूलर अनुप्रयोगों के लिए इस्तेमाल किया जा सकता है। आवेदन केवल उपयोगकर्ता के लिए "स्वीकृत" मॉड्यूल (लोड) मॉड्यूल (डीएलएल) को उजागर करता है।
- लाइब्रेरी को गतिशील रूप से लोड और अनलोड करने की क्षमता, एक प्लग-इन सिस्टम की नींव है जो एक डेवलपर को कार्यक्रमों में अतिरिक्त कार्यक्षमता जोड़ने की अनुमति देता है।
- पुराने विंडोज संस्करणों के साथ पीछे की संगतता जिसमें सिस्टम DLL एक ही फ़ंक्शन का समर्थन नहीं कर सकता है या उसी तरह से समर्थित हो सकता है। पहले विंडोज संस्करण का पता लगाना, फिर डायनामिक रूप से लिंक करना जो आपके ऐप पर चल रहा है, के आधार पर आपको अधिक समर्थन करने की अनुमति देता है विंडोज़ के संस्करण और पुराने OS के लिए वर्कअराउंड प्रदान करते हैं (या बहुत कम से कम, कृपापूर्वक अक्षम सुविधाओं को आप नहीं कर सकते हैं सहयोग।)
विपक्ष:
- अधिक कोड की आवश्यकता होती है, जो शुरुआती डेवलपर के लिए हमेशा आसान नहीं होता है।