मैं हमेशा अपने सी # कोड में डीएलएल का संदर्भ दे रहा हूं, लेकिन वे कुछ रहस्य बने रहे हैं जिन्हें मैं स्पष्ट करना चाहता हूं। यह डीएलएल के संबंध में सवालों के मस्तिष्क डंप का एक प्रकार है।डीएलएल में क्या है और यह कैसे काम करता है?
मुझे लगता है कि एक डीएलएल एक गतिशील रूप से जुड़ी लाइब्रेरी है जिसका अर्थ है कि एक और प्रोग्राम "कार्यक्षमता" प्राप्त करने के लिए रन टाइम पर इस लाइब्रेरी तक पहुंच सकता है। हालांकि, Web.dll
और Business.dll
(Web.dll
के साथ निम्नलिखित एएसपी.NET प्रोजेक्ट पर विचार करें, फ्रंट एंड कार्यक्षमता है और यह Business.dll
संदर्भों और विधियों के लिए संदर्भित करता है)।
किस बिंदु पर
Web.dll
गतिशीलBusiness.dll
से लिंक करता है? वर्ड (इत्यादि) का उपयोग करते समय आपको लगता है कि विंडोज़ एचडीडी में बहुत छोटे कार्यों के लिए थ्रैशिंग में बहुत कुछ है और मुझे लगता है कि वर्ड बंद हो रहा है और अन्य डीएलएल से कार्यक्षमता में गतिशील रूप से लिंक हो रहा है?1 ए। इसके अतिरिक्त, डीएलएल क्या लोड करता है और लिंक करता है - ओएस या कुछ रन टाइम फ्रेमवर्क जैसे .NET ढांचे?
1 बी। "लिंकिंग" की प्रक्रिया क्या है? क्या संगतता जांच की गई है? एक ही स्मृति में लोड हो रहा है? लिंकिंग वास्तव में क्या मतलब है?
डीएलएल में वास्तव में कोड को निष्पादित करता है क्या? क्या यह प्रोसेसर द्वारा निष्पादित किया जाता है या क्या प्रोसेसर डीएलएल के अंदर कोड को समझने से पहले अनुवाद या संकलन का एक और चरण है?
2 ए। सी # .NET में निर्मित डीएलएल के मामले में, यह क्या चल रहा है: .NET Framework या ऑपरेटिंग सिस्टम सीधे?
क्या लिनक्स से एक डीएलएल विंडोज सिस्टम पर काम करता है (यदि ऐसी कोई चीज़ मौजूद है), या वे ऑपरेटिंग सिस्टम विशिष्ट हैं?
क्या डीएलएल किसी विशेष ढांचे के लिए विशिष्ट हैं? क्या सी # .NET का उपयोग करके बनाया गया डीएलएल एक डीएलएल द्वारा बनाया जा सकता है, उदाहरण के लिए, बोर्लैंड सी ++?
4 ए। यदि 4 का उत्तर "नहीं" है तो डीएलएल का बिंदु क्या है? विभिन्न ढांचे को लिंक किए गए फाइलों के लिए अपने प्रारूपों का उपयोग क्यों नहीं करते? उदाहरण के लिए: .NET में निर्मित एक .exe जानता है कि .abc का एक फ़ाइल प्रकार ऐसा कुछ है जो यह उसके कोड में लिंक कर सकता है।
Web.dll
/Business.dll
उदाहरण के लिए वापस जा रहे हैं - ग्राहक के एक वर्ग के प्रकार मैंWeb.dll
से संदर्भित करने के लिएBusiness.dll
जरूरत है पाने के लिए। इसका मतलब यह होना चाहिए किBusiness.dll
में कुछ प्रकार का विनिर्देश है कि वास्तव में ग्राहक वर्ग क्या है। अगर मैंने अपनीBusiness.dll
फ़ाइल संकलित की है, तो कहें, डेल्फी: क्या सी # समझ जाएगा और ग्राहक वर्ग बनाने में सक्षम होगा, या क्या कुछ प्रकार की हेडर जानकारी या कुछ ऐसा कहता है, "अरे क्षमा करें, आप केवल मुझे एक और डेल्फी डीएलएल से उपयोग कर सकते हैं "?5 ए। विधियों के लिए भी लागू होता है; क्या मैं एक डीएलएल में
CreateInvoice()
विधि लिख सकता हूं, इसे C++ में संकलित कर सकता हूं, और फिर उसे C# से एक्सेस और चला सकता हूं? क्या रोकता है या मुझे ऐसा करने की अनुमति देता है?डीएलएल अपहरण के विषय पर, निश्चित रूप से प्रतिस्थापन (खराब) डीएलएल में अपूर्ण तरीके से सटीक विधि हस्ताक्षर और प्रकार होना चाहिए। मुझे लगता है कि अगर आप यह पता लगा सकते हैं कि मूल डीएलएल में कौन सी विधियां उपलब्ध थीं तो यह करना मुश्किल नहीं होगा।
6 ए। मेरे सी # प्रोग्राम में क्या निर्णय ले रहा है कि क्या मैं एक और डीएलएल एक्सेस कर सकता हूं?अगर मेरे अपहृत डीएलएल में मूल रूप से वही विधियों और प्रकार शामिल थे लेकिन इसे किसी अन्य भाषा में संकलित किया गया था, तो क्या यह काम करेगा?
डीएलएल आयात और डीएलएल पंजीकरण क्या है?
यह प्रश्न शायद SO इतिहास में सबसे लंबे उत्तर के लिए पूछ रहा है। –
मुझे लगता है कि इस प्रश्न को अधिक ध्यान देने की जरूरत है। मैं बंद करने के लिए वोट नहीं दूंगा क्योंकि मुझे लगता है कि इसकी क्षमता है। – ChaosPandion
यह 12 अलग-अलग प्रश्न हो सकते थे। –