.Dll और .exe के बीच अंतर


91

मैं dll और exe फ़ाइल के बीच सटीक अंतर जानना चाहता हूं।


1
आपको यहाँ कुछ संदर्भ जोड़ना चाहिए: क्या आप एक शुरुआत हैं, क्या आप पीई सामान या किसी अन्य चीज़ के कुछ गहरे तकनीकी विनिर्देश देख रहे हैं
khebbie

3
यह सच है कि मैं एक शुरुआती हूं। यह एक साक्षात्कार-प्रश्न है जैसा कि टैग किया गया है।
उमेश आवते जुले

इससे भी महत्वपूर्ण बात, इस डुप्लिकेट है सहित एक (हटाया गया) sakthivignesh द्वारा ...
मार्क Gravell

जवाबों:


71

प्रोग्राम फ़ाइल:

  1. यह एक निष्पादन योग्य फ़ाइल है
  2. एक निष्पादन योग्य लोड करते समय, कोई निर्यात नहीं कहा जाता है, लेकिन केवल मॉड्यूल प्रविष्टि बिंदु।
  3. जब कोई सिस्टम नया निष्पादन योग्य लॉन्च करता है, तो एक नई प्रक्रिया बनाई जाती है
  4. प्रवेश सूत्र को उस प्रक्रिया के मुख्य सूत्र के संदर्भ में कहा जाता है।

DLL:

  1. यह एक डायनामिक लिंक लाइब्रेरी है
  2. कई निर्यात प्रतीक हैं।
  3. सिस्टम एक मौजूदा प्रक्रिया के संदर्भ में एक DLL लोड करता है।

अधिक जानकारी के लिए: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_exEan

संदर्भ: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exexx


9
सिस्टम एक मौजूदा प्रक्रिया में एक DLL लोड करता है, न कि थ्रेड। किसी LibMainफ़ंक्शन के माध्यम से थ्रेड प्रारंभ या बंद होने पर, हर DLL एक प्रक्रिया प्राप्त कर सकता है ।
डैनियल इयरविकर

13
आपके अंक 1 और 2 100% सही नहीं हैं। चूँकि आप LoadLibraryEx को एक exe या dll पर प्रयोग कर सकते हैं, जिसका अर्थ है कि आप GetProcAddress का उपयोग किसी exe या dll से प्रविष्टि बिंदु को लोड करने के लिए कर सकते हैं। तो उस संबंध में, exe और dll फाइलें दोनों को गतिशील रूप से जोड़ा जा सकता है और इसमें किसी भी प्रकार के प्रवेश बिंदु हो सकते हैं।
जुसिज

131

मैं नहीं जानता कि क्यों हर कोई .NET के संदर्भ में इस सवाल का जवाब दे रहा है। सवाल एक सामान्य था और कहीं भी .NET का उल्लेख नहीं किया था।

खैर, प्रमुख अंतर हैं:

प्रोग्राम फ़ाइल

  1. एक exe हमेशा अपने खुद के एड्रेस स्पेस में चलता है यानी, यह एक अलग प्रक्रिया है।
  2. एक EXE का उद्देश्य अपने स्वयं के एक अलग एप्लिकेशन को लॉन्च करना है।

DLL

  1. एक dll को चलाने के लिए हमेशा एक मेजबान exe की आवश्यकता होती है। यानी, यह अपने स्वयं के पते के स्थान पर कभी नहीं चल सकता है।
  2. DLL का उद्देश्य उन विधियों / वर्गों का एक संग्रह है, जिन्हें किसी अन्य अनुप्रयोग से पुन: उपयोग किया जा सकता है।
  3. DLL Microsoft की साझा लाइब्रेरी का कार्यान्वयन है।

DLL और exe का फ़ाइल प्रारूप अनिवार्य रूप से समान है। Windows फ़ाइल में PE हैडर के माध्यम से DLL और EXE के बीच के अंतर को पहचानता है। पीई हैडर के विवरण के लिए, आप MSDN पर इस लेख पर एक नज़र डाल सकते हैं


4
इसलिए, यदि आप चाहते थे कि आप कूप का नाम बदलें और फिकेल के हेडर को एक एक्सईएल में उलटाने के लिए और इसके विपरीत में एडिट करें?
RCIX

@ आरसीआईएक्स: मुझे संदेह है कि यह संभव है?
वूडूचाइल्ड

यह सबसे अधिक संभव नहीं है - नीचे किचिक का जवाब देखें।
जोनाथन रेनहार्ट

31

अंतर यह है कि एक EXE में एक प्रवेश बिंदु है, एक "मुख्य" विधि है जो निष्पादन पर चलेगी।

एक DLL के भीतर कोड को किसी अन्य एप्लिकेशन से कॉल करने की आवश्यकता होती है।


11
यह गलत है, इसका तात्पर्य है कि DLL में प्रवेश बिंदु नहीं हैं। DLL में DLLMain एंट्री पॉइंट हो सकता है जिसे तब कहा जाता है जब (अन्य चीजों के अलावा) DLL को प्रक्रिया में लोड किया जाता है
jay.lee

29

आपके द्वारा बताए गए ढांचे के संबंध में कुछ और मतभेद हैं।

  1. DLL और EXE दोनों एक ही फाइल संरचना को साझा करते हैं - पोर्टेबल निष्पादन योग्य, या पीई। दोनों के बीच अंतर करने के लिए, कोई अंदर के Characteristicsसदस्य को देख सकता IMAGE_FILE_HEADERहै IMAGE_NT_HEADERS। DLL के लिए, इसमें IMAGE_FILE_DLL(0x2000) ध्वज है। EXE के लिए यह IMAGE_FILE_EXECUTABLE_IMAGE(0x2) ध्वज है।
  2. पीई फाइलों में कुछ हेडर और कई सेक्शन होते हैं। आमतौर पर कोड के लिए एक खंड, डेटा के लिए एक खंड, आयातित कार्यों को सूचीबद्ध करने वाला एक खंड और संसाधनों के लिए एक अनुभाग होता है। कुछ वर्गों में एक से अधिक चीजें हो सकती हैं। शीर्षलेख उन डेटा निर्देशिकाओं की एक सूची का भी वर्णन करता है जो अनुभागों में स्थित हैं। वे डेटा निर्देशिकाएं हैं जो विंडोज को पीई में इसकी आवश्यकता को खोजने में सक्षम बनाती हैं। लेकिन एक प्रकार की डेटा निर्देशिका जो एक EXE में कभी नहीं होगी (जब तक कि आप एक फ्रैंकनस्टाइन EXE का निर्माण नहीं कर रहे हैं) निर्यात निर्देशिका है। यह वह जगह है जहाँ DLL फ़ाइलों में उन कार्यों की सूची होती है जिनका वे निर्यात करते हैं और जिनका उपयोग अन्य EXE या DLL फ़ाइलों द्वारा किया जा सकता है। दूसरी तरफ, प्रत्येक DLL और EXE की एक आयात निर्देशिका होती है, जहाँ यह फ़ंक्शन और DLL फ़ाइलों को सूचीबद्ध करता है, जिन्हें इसे चलाने की आवश्यकता होती है।
  3. पीई हेडर में भी ( IMAGE_OPTIONAL_HEADER) ImageBaseसदस्य है। यह वर्चुअल पते को निर्दिष्ट करता है जिस पर पीई मानता है कि इसे लोड किया जाएगा। यदि इसे किसी अन्य पते पर लोड किया जाता है, तो कुछ संकेत गलत मेमोरी को इंगित कर सकते हैं। जैसे EXE फाइलें उनके नए एड्रेस स्पेस में लोड होने वाली पहली में से एक हैं, विंडोज लोडर एक निरंतर लोड एड्रेस को आश्वस्त कर सकता है और यह आमतौर पर 0x00400000 है। वह विलासिता एक DLL के लिए मौजूद नहीं है। एक ही प्रक्रिया में भरी हुई दो DLL फाइलें एक ही पते का अनुरोध कर सकती हैं। यही कारण है कि एक DLL के पास एक और डेटा निर्देशिका है, जिसे बेस रिलोकेशन डायरेक्टरी कहा जाता है, जो आमतौर पर अपने सेक्शन में रहती है - .reloc। इस निर्देशिका में DLL में उन स्थानों की एक सूची है, जिन्हें पुन: व्यवस्थित / पैच किए जाने की आवश्यकता है ताकि वे सही मेमोरी की ओर इंगित करें। अधिकांश EXE फ़ाइलों में यह निर्देशिका नहीं है, लेकिन कुछ पुराने संकलक उन्हें उत्पन्न करते हैं।

आप इस विषय पर अधिक पढ़ सकते हैं @ MSDN


1
1. जैसा कि वे झंडे हैं, दोनों को एक ही बार में सेट किया जा सकता है। 2. जैसा कि आपने कहा, यह संभव है लेकिन गायब होने की संभावना नहीं है। 3. एएसएलआर एक्सो को स्थानांतरित कर देगा, यदि यह हो सकता है। तो हां, यहां तक ​​कि एक निर्वासित व्यक्ति के पास भी स्थानांतरण हो सकते हैं। सभी में, EXE जो DLL हैं संभव हैं लेकिन दुर्लभ हैं
Deduplicator

20

यह उत्तर मेरे विचार से थोड़ा अधिक विस्तृत था, लेकिन इसके माध्यम से पढ़ा।

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

उदाहरण के लिए:
कल्पना कीजिए कि आप एक बटन की तरह एक Windows GUI घटक बना रहे हैं । अधिकांश मामलों में आप अपने द्वारा लिखे गए कोड का फिर से उपयोग करना चाहते हैं क्योंकि यह एक जटिल लेकिन एक सामान्य घटक है - आप इसका उपयोग करने के लिए कई एप्लिकेशन चाहते हैं लेकिन आप उन्हें स्रोत कोड नहीं देना चाहते हैं जिसे आप कॉपी नहीं कर सकते। -हर प्रोग्राम में बटन के लिए कोड पेस्ट करें, इसलिए आप तय करें कि आप DL-Library (DLL) बनाना चाहते हैं ।

इस "बटन" लाइब्रेरी को चलाने के लिए EXE कटेबल्स की आवश्यकता होती है , और इसके बिना वे नहीं चलेंगे क्योंकि वे नहीं जानते कि बटन कैसे बनाया जाए, केवल इससे कैसे बात करें।

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

EXE:
एक निष्पादन योग्य प्रोग्राम है । यह जानता है कि एक प्रक्रिया कैसे बनाई जाए और DLL से कैसे बात की जाए। यह एक बटन बनाने के लिए DLL की जरूरत है , और इसके बिना आवेदन नहीं चलता है - ERROR।

उम्मीद है की यह मदद करेगा....


.NET डेवलपमेंट की दुनिया में, जब आप अन्य मॉड्यूल से चीजों को आयात कर रहे होते हैं, उदाहरण के लिए, जैसे C # में using SomeClassFromALibrary, वह लाइब्रेरी DLL के माध्यम से प्रोजेक्ट से जुड़ी होती है? बस यह देखने की कोशिश कर रहा हूं कि क्या मैं सही ढंग से समझ रहा हूं
अब्दुल

आप सामान्य रूप से usingनामस्थानों के लिए कीवर्ड का उपयोग करते हैं , कक्षाओं के लिए नहीं। अपवाद using staticc # 6 से उपलब्ध है, जो निर्दिष्ट वर्ग ( लिंक ) में मौजूद सभी स्थिर सदस्यों को आयात करता है । usingकीवर्ड संकलक करने के लिए एक वादा जो रनटाइम के दौरान वहाँ कि युक्त एक पुस्तकालय हो जाएगा देता है नाम स्थान । पुस्तकालय उस DLL के माध्यम से परियोजना से जुड़ा नहीं है, DLL वह पुस्तकालय है जो परियोजना (असेंबली) से जुड़ा हुआ है। उस DLL में वह सभी कोड सम्‍मिलित हैं, जो संकलन समय में वादा किया गया था।
डेरियस

16

DLL और EXE दोनों पोर्टेबल एक्ज़ीक्यूटेबल (PE) प्रारूप हैं

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

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

हेडर जानकारी की जांच करने के लिए कई सॉफ्टवेयर उपलब्ध हैं। केवल अंतर दोनों को अलग-अलग काम करने के कारण हेडर में थोड़ा सा है जैसा कि नीचे आरेख में दिखाया गया है।

हैडर

EXE फ़ाइल में केवल एक ही मुख्य प्रविष्टि है इसका मतलब है कि यह अलग-थलग अनुप्रयोग है, जब कोई सिस्टम exe लॉन्च करता है, तो एक नई प्रक्रिया बनाई जाती है जबकि DLL में कई प्रवेश बिंदु होते हैं, इसलिए जब अनुप्रयोग इसका उपयोग करता है तो कोई नई प्रक्रिया शुरू नहीं होती है, DLL का पुन: उपयोग और संस्करण किया जा सकता है। DLL भंडारण स्थान को कम करता है क्योंकि विभिन्न प्रोग्राम एक ही dll का उपयोग कर सकते हैं।


3
आप कहते हैं "पीई हेडर के अंदर एक ध्वज यह बताता है कि यह किस प्रकार की फाइल है (फाइल एक्सटेंशन का अप्रासंगिक)" --- तो इसका मतलब यह है कि एक्सटेंशन है .exeया .dllनहीं? यह हैडर में वह ध्वज है जो वास्तव में उन्हें अलग करता है .... इसलिए अगर मैं एक बनाता हूं exeऔर इसे GUI इंटरैक्शन के रूप में एक के रूप में नाम देता हूं .dll, लेकिन फिर उस ध्वज को मैन्युअल रूप से बदल देता है, तो यह अभी भी चलने योग्य है?
अब्दुल

4

दो चीजें: एक्सटेंशन और हेडर झंडा फ़ाइल में संग्रहीत।

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

एक मामूली अंतर यह है कि ज्यादातर मामलों में DLL का एक निर्यात खंड होता है जहां प्रतीकों का निर्यात किया जाता है। EXE में कभी भी निर्यात खंड नहीं होना चाहिए क्योंकि वे पुस्तकालय नहीं हैं, लेकिन ऐसा कुछ भी नहीं होता है। Win32 लोडर किसी भी तरह से परवाह नहीं करता है।

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


3
+1: बहुत कम लोगों को पता है कि तकनीकी रूप से, पीई हेडर में केवल एक ही अंतर है
सर्ज वुटियर

मुझे आश्चर्य है कि अगर आपने इस तरह से जवाब दिया तो एक साक्षात्कार में क्या होगा। उन्हें: "एक DLL और एक EXE के बीच अंतर क्या है?" आप: "वन बिट"।
जेएमआई मैडिसन

4

Dll v / s Exe

1) DLL फाइल एक डायनेमिक लिंक लाइब्रेरी है, जिसका उपयोग exe फाइलों और अन्य dll फाइलों में किया जा सकता है।
EXE फ़ाइल एक निष्पादन योग्य फ़ाइल है जो एक अलग प्रक्रिया में चलती है जिसे OS द्वारा प्रबंधित किया जाता है।

2) DLL सीधे निष्पादन योग्य नहीं हैं। वे अलग-अलग फाइलें हैं जिनमें फ़ंक्शन और फ़ंक्शन और फ़ंक्शन करने के लिए अन्य DLL द्वारा कॉल किए जा सकने वाले फ़ंक्शंस हैं।
एक EXE एक प्रोग्राम है जिसे निष्पादित किया जा सकता है। Ex: विंडोज प्रोग्राम

3) पुन
: प्रयोज्य डीएलएल: उन्हें कुछ अन्य एप्लिकेशन के लिए पुन: उपयोग किया जा सकता है। जब तक कोडर DLL फ़ाइल में कार्यों और प्रक्रियाओं के नाम और मापदंडों को जानता है।
EXE: केवल विशिष्ट उद्देश्य के लिए।

4) एक DLL कॉलिंग एप्लिकेशन की एक ही प्रक्रिया और मेमोरी स्पेस साझा करेगा जबकि एक
EXE अपनी अलग प्रक्रिया और मेमोरी स्पेस बनाता है।

5)
डीएलएल का उपयोग करता है : आप इसका उपयोग करने के लिए कई एप्लिकेशन चाहते हैं, लेकिन आप उन्हें स्रोत कोड नहीं देना चाहते। आप हर प्रोग्राम में बटन के लिए कोड को कॉपी-पेस्ट नहीं कर सकते, इसलिए आप तय करते हैं कि आप डीएल बनाना चाहते हैं- पुस्तकालय (DLL)।

EXE: जब हम विंडोज फॉर्म्स एप्लिकेशन, कंसोल एप्लीकेशन, डब्ल्यूपीएफ एप्लिकेशन और विंडोज सर्विसेज जैसे प्रोजेक्ट टेम्प्लेट के साथ काम करते हैं, तो वे संकलित होने पर एक एक्सें असेंबली उत्पन्न करते हैं।

6) समानताएं:
DLL और EXE दोनों बाइनरी फाइलें हैं जो पोर्टेबल एक्सेसेबल प्रारूप द्वारा परिभाषित एक जटिल नेस्टेड संरचना है, और वे उपयोगकर्ताओं द्वारा संपादन योग्य नहीं हैं।


2

Theexe प्रोग्राम है। .Dll एक पुस्तकालय है जिसे .exe (या अन्य .dll) में कॉल किया जा सकता है।

क्या sakthivignesh कहते हैं कि इसमें सच हो सकता है। एक दूसरे का उपयोग कर सकते हैं जैसे कि यह एक पुस्तकालय था, और यह कुछ COM घटकों के साथ किया जाता है (उदाहरण के लिए)। इस मामले में, "दास" .exe एक अलग कार्यक्रम है (सख्ती से बोल रहा है, एक अलग प्रक्रिया - शायद एक अलग मशीन पर चल रहा है), लेकिन एक जो अन्य कार्यक्रमों / घटकों / जो कुछ भी से अनुरोधों को स्वीकार करता है और संभालता है।

हालाँकि, यदि आप सिर्फ एक यादृच्छिक .exe और .dll को अपने प्रोग्राम फ़ाइलों में फ़ोल्डर से चुनते हैं, तो संभावनाएं हैं कि COM प्रासंगिक नहीं है - वे सिर्फ एक प्रोग्राम और इसके गतिशील रूप से जुड़े पुस्तकालय हैं।

Win32 APIs का उपयोग करके, एक प्रोग्राम LoadLibrary और GetProcAddress API फ़ंक्शन, IICC का उपयोग करके DLL को लोड और उपयोग कर सकता है। Win16 में इसी तरह के कार्य थे।

COM कई मायनों में डीएलएल विचार का विकास है, जिसे मूल रूप से OLE2 के आधार के रूप में जाना जाता है, जबकि .NET COM का वंशज है। DLL विंडोज 1, IIRC के आसपास है। वे मूल रूप से मेमोरी उपयोग को कम करने के लिए कई चल रहे कार्यक्रमों के बीच बाइनरी कोड (विशेष रूप से सिस्टम एपीआई) साझा करने का एक तरीका थे।


2

एक EXE एक नियमित Win32 निष्पादन योग्य के रूप में सिस्टम को दिखाई देता है। इसका प्रवेश बिंदु एक छोटे लोडर को संदर्भित करता है जो .NET रनटाइम को इनिशियलाइज़ करता है और इसे EXE में निहित असेंबली को लोड और निष्पादित करने के लिए कहता है। एक DLL सिस्टम को Win32 DLL के रूप में दिखाई देता है, लेकिन बिना किसी प्रवेश बिंदु के सबसे अधिक संभावना है। .NET रनटाइम अपने हेडर में निहित असेंबली के बारे में जानकारी संग्रहीत करता है।

dll पुन: प्रयोज्य कार्यों का एक संग्रह है जहाँ .exe एक निष्पादन योग्य है जो इन कार्यों को कह सकता है


1
.NET रनटाइम का .exe या .dll से कोई लेना-देना नहीं है, वे बाइनरी मशीन कोड फाइलें हैं (यदि वे कुछ प्रोग्रामिंग भाषा में निर्मित हैं जो .NET रनटाइम का उपयोग कर रहे हैं, तो .NET रनटाइम शामिल है, लेकिन यह पहले से ही जिम्मेदारी है exe कोड ही, ओएस लोडर नहीं)।
पेड 7g

1

एक exe एक निष्पादन योग्य प्रोग्राम है जबकि A DLL एक फाइल है जिसे गतिशील रूप से प्रोग्राम द्वारा लोड और निष्पादित किया जा सकता है।


6
किसी ने शायद महसूस किया कि आपका उत्तर पर्याप्त विस्तृत नहीं था।
जेस्पर

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

1

● .exe और dll c # कोड का संकलित संस्करण है जिसे असेंबली भी कहा जाता है।

● .exe एक स्टैंड अलोन एक्ज़ीक्यूटेबल फ़ाइल है, जिसका अर्थ है कि यह सीधे निष्पादित हो सकती है।

● .dll एक पुन: प्रयोज्य घटक है जिसे सीधे निष्पादित नहीं किया जा सकता है और इसे निष्पादित करने के लिए अन्य कार्यक्रमों की आवश्यकता होती है।


0

DLL और EXE में अंतर:

1) DLL एक इन-प्रोसेस कंपोनेंट है जिसका मतलब क्लाइंट प्रोसेस के समान मेमोरी स्पेस में चलना है। EXE एक आउट-प्रोसेस कंपोनेंट है जिसका मतलब है कि यह अपने अलग मेमोरी स्पेस में चलता है।

2) DLL में फ़ंक्शंस और प्रक्रियाएँ होती हैं जिनका अन्य प्रोग्राम उपयोग कर सकते हैं (पुन: प्रयोज्यता को बढ़ावा देते हैं) जबकि EXE को अन्य कार्यक्रमों के साथ साझा नहीं किया जा सकता है।

3) DLL को सीधे निष्पादित नहीं किया जा सकता है क्योंकि वे अन्य कार्यक्रमों द्वारा लोड और चलाने के लिए डिज़ाइन किए गए हैं। EXE एक प्रोग्राम है जिसे सीधे निष्पादित किया जाता है।


-1

कृपया नीचे टिप्पणी करते समय।

संक्षिप्त उत्तर पाने वालों के लिए,

  • यदि किसी असेंबली को एक क्लास लाइब्रेरी के रूप में संकलित किया जाता है और अन्य असेंबली के लिए उपयोग करने के लिए प्रकार प्रदान करता है, तो इसमें ifle एक्सटेंशन .dll (डायनेमिक लिंक लाइब्रेरी) है, और इसे स्टैंडअलोन निष्पादित नहीं किया जा सकता है।

  • इसी तरह, यदि किसी असेंबली को एक एप्लिकेशन के रूप में संकलित किया जाता है, तो इसमें फ़ाइल एक्सटेंशन .exe(निष्पादन योग्य) है और इसे स्टैंडअलोन निष्पादित किया जा सकता है। .NET कोर 3.0 से पहले, कंसोल ऐप्स को .dll fles के लिए संकलित किया गया था और डॉटनेट रन कमांड या एक होस्ट निष्पादन योग्य द्वारा निष्पादित किया जाना था। - स्रोत


-2

DLL और EXE के बीच प्रमुख सटीक अंतर है कि DLL को प्रवेश बिंदु नहीं मिला है और EXE करता है। यदि आप c ++ से परिचित हैं तो आप देख सकते हैं कि निर्माण EXE में मुख्य () एंट्री फ़ंक्शन है और DLL नहीं है :)


ऐसा मत सोचो। यहाँ देखें msdn.microsoft.com/en-us/library/ms682596(VS.85).aspx
Aamir
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.