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