ความแตกต่างระหว่าง. dll และ. exe


92

ฉันต้องการทราบความแตกต่างที่แน่นอนระหว่างไฟล์ dll และ exe


1
คุณควรเพิ่มบริบทที่นี่: คุณเป็นมือใหม่คุณกำลังมองหาข้อกำหนดทางเทคนิคที่ลึกซึ้งของสิ่งที่เป็น PE หรืออย่างอื่น
khebbie

3
เป็นความจริงฉันเป็นมือใหม่ เป็นคำถามสัมภาษณ์ตามแท็ก
Umesh Aawte

ที่สำคัญกว่านี้เป็นรายการที่ซ้ำกันซึ่งรวมถึงหนึ่ง (ลบ) โดย sakthivignesh ...
Marc Gravell

คำตอบ:


73

EXE:

  1. มันเป็นไฟล์ปฏิบัติการ
  2. เมื่อโหลดไฟล์ปฏิบัติการจะไม่มีการเรียกเอ็กซ์พอร์ต แต่เฉพาะจุดเข้าโมดูลเท่านั้น
  3. เมื่อระบบเปิดตัวปฏิบัติการใหม่กระบวนการใหม่จะถูกสร้างขึ้น
  4. เธรดรายการถูกเรียกในบริบทของเธรดหลักของกระบวนการนั้น

DLL:

  1. มันคือ Dynamic Link Library
  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_EXE_and_a_DLL

อ้างอิง: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx


9
ระบบโหลด DLL ในกระบวนการที่มีอยู่ไม่ใช่เธรด ทุก DLL ในกระบวนการสามารถรับการแจ้งเตือนเมื่อเธรดเริ่มหรือหยุดผ่านทางLibMainฟังก์ชัน
Daniel Earwicker

13
คะแนนของคุณ 1 และ 2 ไม่ถูกต้อง 100% เนื่องจากคุณสามารถใช้ LoadLibraryEx บน exe หรือ dll ซึ่งหมายความว่าคุณสามารถใช้ GetProcAddress เพื่อโหลดจุดเข้าจาก exe หรือ dll ดังนั้นในเรื่องนี้ทั้งไฟล์ exe และ dll สามารถเชื่อมโยงแบบไดนามิกและสามารถมีจุดเข้าใช้งานจำนวนเท่าใดก็ได้
jussij

136

ฉันไม่รู้ว่าทำไมทุกคนถึงตอบคำถามนี้ในบริบทของ. NET คำถามเป็นคำถามทั่วไปและไม่ได้กล่าวถึง. NET ที่ใดเลย

ความแตกต่างที่สำคัญคือ:

EXE

  1. exe มักจะทำงานในพื้นที่แอดเดรสของตัวเองนั่นคือกระบวนการแยกต่างหาก
  2. วัตถุประสงค์ของ EXE คือการเปิดแอปพลิเคชันแยกต่างหากของตัวเอง

DLL

  1. dll จำเป็นต้องมี exe โฮสต์เสมอเพื่อเรียกใช้ กล่าวคือไม่สามารถทำงานในพื้นที่ที่อยู่ของตัวเองได้
  2. วัตถุประสงค์ของ DLL คือการรวบรวมวิธีการ / คลาสที่สามารถใช้ซ้ำได้จากแอปพลิเคชันอื่น ๆ
  3. DLL คือการใช้ไลบรารีที่ใช้ร่วมกันของ Microsoft

รูปแบบไฟล์ของ DLL และ exe นั้นเหมือนกัน Windows รับรู้ความแตกต่างระหว่าง DLL และ EXE ผ่าน PE Header ในไฟล์ สำหรับรายละเอียดของ PE Header คุณสามารถดูบทความนี้ใน MSDN


4
ดังนั้นหากคุณต้องการให้คุณเปลี่ยนชื่อและแก้ไขส่วนหัวของ fikle เพื่อเปลี่ยน dll เป็น exe และในทางกลับกัน?
RCIX

@RCIX: ฉันสงสัยว่าเป็นไปได้?
VoodooChild

เป็นไปไม่ได้มากที่สุด - ดูคำตอบของ kichikด้านล่าง
Jonathon Reinhart

32

ความแตกต่างก็คือ EXE มีจุดเริ่มต้นซึ่งเป็นวิธีการ "หลัก" ที่จะทำงานเมื่อดำเนินการ

ต้องเรียกรหัสภายใน DLL จากแอปพลิเคชันอื่น


12
นี่เป็นการโหลดผิดพลาดซึ่งหมายความว่า DLL ไม่มีจุดเข้าใช้งาน DLL อาจมีจุดเข้า DLLMain ซึ่งเรียกว่าเมื่อ (เหนือสิ่งอื่นใด) DLL ถูกโหลดลงในกระบวนการ
jay.lee

29

ยังมีความแตกต่างอีกเล็กน้อยเกี่ยวกับโครงสร้างที่คุณสามารถพูดถึงได้

  1. ทั้ง DLL และ EXE ใช้โครงสร้างไฟล์เดียวกัน - Portable Executable หรือ PE ความแตกต่างระหว่างสองคนคนหนึ่งสามารถดูในCharacteristicsสมาชิกของภายในIMAGE_FILE_HEADER IMAGE_NT_HEADERSสำหรับ DLL จะมีการIMAGE_FILE_DLLเปิดแฟล็ก (0x2000) สำหรับ EXE เป็นIMAGE_FILE_EXECUTABLE_IMAGEแฟล็ก (0x2)
  2. ไฟล์ PE ประกอบด้วยส่วนหัวบางส่วนและหลายส่วน โดยปกติจะมีส่วนสำหรับรหัสส่วนสำหรับข้อมูลส่วนที่แสดงรายการฟังก์ชันที่นำเข้าและส่วนสำหรับทรัพยากร บางส่วนอาจมีมากกว่าหนึ่งสิ่ง ส่วนหัวยังอธิบายถึงรายการไดเร็กทอรีข้อมูลที่อยู่ในส่วนต่างๆ ไดเร็กทอรีข้อมูลเหล่านี้เป็นสิ่งที่ช่วยให้ Windows สามารถค้นหาสิ่งที่ต้องการใน PE แต่ไดเร็กทอรีข้อมูลประเภทหนึ่งที่ EXE จะไม่มี (เว้นแต่คุณกำลังสร้าง frankenstein EXE) คือไดเร็กทอรีการส่งออก นี่คือที่ที่ไฟล์ DLL มีรายการฟังก์ชันที่ส่งออกและสามารถใช้โดยไฟล์ EXE หรือ DLL อื่น ๆ ในอีกด้านหนึ่ง DLL และ EXE แต่ละรายการมีไดเร็กทอรีนำเข้าซึ่งแสดงรายการฟังก์ชันและไฟล์ DLL ที่ต้องใช้ในการเรียกใช้
  3. นอกจากนี้ในส่วนหัว PE ( IMAGE_OPTIONAL_HEADER) คือImageBaseสมาชิก ระบุแอดเดรสเสมือนที่ PE ถือว่าจะถูกโหลด หากโหลดด้วยที่อยู่อื่นพอยน์เตอร์บางตัวอาจชี้ไปที่หน่วยความจำผิด เนื่องจากไฟล์ EXE เป็นหนึ่งในไฟล์แรกที่โหลดลงในพื้นที่แอดเดรสใหม่ตัวโหลด Windows สามารถรับรองที่อยู่โหลดคงที่และโดยปกติจะเป็น 0x00400000 ความหรูหรานั้นไม่มีอยู่สำหรับ DLL ไฟล์ DLL สองไฟล์ที่โหลดในกระบวนการเดียวกันสามารถขอที่อยู่เดียวกันได้ นี่คือเหตุผลที่ DLL ที่มีไดเรกทอรีข้อมูลอื่นที่เรียกว่าฐานย้าย Directory ที่มักจะอาศัยอยู่ในส่วนของตัวเอง .reloc- ไดเร็กทอรีนี้มีรายชื่อของสถานที่ใน DLL ที่ต้องทำการ rebased / patched เพื่อให้ชี้ไปที่หน่วยความจำที่ถูกต้อง ไฟล์ EXE ส่วนใหญ่ไม่มีไดเร็กทอรีนี้ แต่คอมไพเลอร์เก่าบางตัวสร้างขึ้น

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ @ MSDN


2
1. เนื่องจากเป็นแฟล็กจึงสามารถตั้งค่าทั้งสองอย่างพร้อมกันได้ 2. อย่างที่คุณบอกมันเป็นไปได้ แต่ไม่น่าจะหายไปเลย 3. ASLR จะย้าย exe ด้วยถ้าทำได้ ใช่แล้วแม้แต่ exe ก็สามารถมีการย้ายที่อยู่ได้ ทั้งหมดในทุก EXEs ซึ่งกำลังเป็นไปได้ แต่หายาก
Deduplicator

22

คำตอบนี้ละเอียดกว่าที่คิดเล็กน้อย แต่อ่านผ่าน ๆ

DLL:
ในกรณีส่วนใหญ่ไฟล์ DLL เป็นห้องสมุด มีสองประเภทของห้องสมุดเป็นแบบไดนามิกและแบบคงที่ - อ่านเกี่ยวกับความแตกต่าง DLL ย่อมาจากdynamic link libraryซึ่งบอกเราว่าเป็นส่วนหนึ่งของโปรแกรม แต่ไม่ใช่ทั้งหมด มันทำจากส่วนประกอบซอฟต์แวร์นำมาใช้ใหม่ ( ห้องสมุด ) ที่คุณสามารถใช้สำหรับการมากกว่าโปรแกรมเดียว โปรดทราบว่าเป็นไปได้เสมอที่จะใช้ซอร์สโค้ดของไลบรารีในหลาย ๆ แอปพลิเคชันโดยใช้การคัดลอกวาง แต่แนวคิดของ DLL / Static Library คือคุณสามารถอัปเดตรหัสของไลบรารีและในเวลาเดียวกันจะอัปเดตแอปพลิเคชันทั้งหมดโดยใช้ มัน - โดยไม่ต้องรวบรวม

ตัวอย่างเช่น
ลองนึกภาพคุณกำลังสร้างคอมโพเนนต์ของ Windows GUIเช่นปุ่ม ในกรณีส่วนใหญ่คุณต้องการใช้โค้ดที่คุณเขียนซ้ำเนื่องจากเป็นรหัสที่ซับซ้อน แต่เป็นส่วนประกอบทั่วไปคุณต้องการให้แอปพลิเคชันจำนวนมากใช้งานได้ แต่คุณไม่ต้องการให้รหัสที่มาคุณไม่สามารถคัดลอกได้ -paste รหัสสำหรับปุ่มในทุกโปรแกรมเพื่อให้คุณตัดสินใจว่าคุณต้องการที่จะสร้างDL-Library (DLL)

นี้"ปุ่ม"ห้องสมุดถูกต้องตามEXE cutables ในการทำงานและไม่ได้ที่พวกเขาจะไม่ทำงานเพราะพวกเขาไม่ทราบวิธีการสร้างปุ่มเพียงวิธีการพูดคุยกับมัน

ในทำนองเดียวกัน DLL ที่ไม่สามารถดำเนินการ - วิ่งเพราะมันเป็นเพียงส่วนหนึ่งของโปรแกรม แต่ไม่ได้มีข้อมูลที่จำเป็นในการสร้าง"ขั้นตอน"

EXE:
ปฏิบัติการเป็นโปรแกรม มันรู้วิธีสร้างกระบวนการและวิธีพูดคุยกับ DLL มันต้องการ DLL เพื่อสร้างปุ่มและโดยไม่ได้ใบสมัครไม่ได้รัน - ข้อผิดพลาด

หวังว่านี่จะช่วยได้ ....


ในโลกแห่งการพัฒนา. NET เมื่อคุณนำเข้าสิ่งต่างๆจากโมดูลอื่น ๆ เช่นใน C # using SomeClassFromALibraryไลบรารีนั้นจะเชื่อมโยงกับโปรเจ็กต์ผ่าน DLL? แค่พยายามดูว่าฉันเข้าใจถูกต้องหรือไม่
อับดุล

โดยปกติคุณใช้คีย์เวิร์ดusingสำหรับเนมสเปซไม่ใช่คลาส มีข้อยกเว้นสำหรับusing staticc # 6 ซึ่งนำเข้าสมาชิกแบบคงที่ทั้งหมดที่มีอยู่ในคลาสที่ระบุ ( ลิงก์ ) usingคำหลักให้สัญญาว่าจะคอมไพเลอร์ที่ที่รันไทม์จะมีห้องสมุดที่มีที่namespace ไลบรารีไม่ได้เชื่อมโยงกับโปรเจ็กต์ผ่าน DLL นั้น DLL คือไลบรารีที่เชื่อมโยงกับโปรเจ็กต์ (แอสเซมบลี) DLL นั้นมีรหัสทั้งหมดที่สัญญาไว้ในเวลาคอมไพล์
Darius

17

ทั้ง DLL และ EXE เป็นรูปแบบ Portable Executable (PE)

เชื่อมโยง dynamic library (DLL)เป็นห้องสมุดและดังนั้นจึงไม่สามารถดำเนินการได้โดยตรง หากคุณพยายามเรียกใช้คุณจะได้รับข้อผิดพลาดเกี่ยวกับจุดเข้าที่หายไป จำเป็นต้องมีจุดเริ่มต้น (ฟังก์ชันหลัก) เพื่อดำเนินการจุดเข้านั้นอาจเป็นแอปพลิเคชันหรือ exe ใดก็ได้ การรวม DLL เกิดขึ้นในขณะทำงาน นั่นคือเหตุผลที่เรียกว่าไลบรารี "Dynamic Link"

ปฏิบัติการ (EXE)เป็นโปรแกรมที่สามารถดำเนินการ มันมีจุดเข้าของตัวเอง แฟล็กภายในส่วนหัว PE ระบุว่าเป็นไฟล์ประเภทใด (ไม่เกี่ยวข้องกับนามสกุลไฟล์) ส่วนหัว PE มีฟิลด์ที่มีจุดเริ่มต้นสำหรับโปรแกรมอยู่ ใน DLL ไม่ได้ใช้ (หรืออย่างน้อยก็ไม่ใช้เป็นจุดเริ่มต้น)

มีซอฟต์แวร์มากมายสำหรับตรวจสอบข้อมูลส่วนหัว ข้อแตกต่างเพียงอย่างเดียวที่ทำให้ทั้งสองทำงานแตกต่างกันคือบิตในส่วนหัวดังแสดงในแผนภาพด้านล่าง

หัวข้อ

ไฟล์ EXE มีรายการหลักเพียงรายการเดียวหมายความว่าเป็นแอปพลิเคชันที่แยกต่างหากเมื่อระบบเปิดตัว exe กระบวนการใหม่จะถูกสร้างขึ้นในขณะที่ DLL มีจุดเข้าใช้งานจำนวนมากดังนั้นเมื่อแอปพลิเคชันใช้งานจะไม่มีกระบวนการใหม่เริ่มต้น DLL สามารถใช้ซ้ำและกำหนดเวอร์ชันได้ DLL ลดพื้นที่จัดเก็บเนื่องจากโปรแกรมต่างๆสามารถใช้ dll เดียวกันได้


3
คุณพูดว่า "ค่าสถานะภายในส่วนหัว PE ระบุว่าเป็นไฟล์ประเภทใด (ไม่เกี่ยวข้องกับนามสกุลไฟล์)" --- นั่นหมายความว่านามสกุลจะเป็น.exeหรือ.dllไม่สำคัญ? มันเป็นแฟล็กในส่วนหัวที่แยกความแตกต่างอย่างแท้จริง .... ดังนั้นถ้าฉันสร้างexeและตั้งชื่อผ่านการโต้ตอบ GUI เป็น a .dllแต่เปลี่ยนแฟล็กนั้นด้วยตนเองก็ยังรันได้?
อับดุล

6

exe dll v / s

1) ไฟล์ DLL เป็นไลบรารีลิงค์แบบไดนามิกซึ่งสามารถใช้ในไฟล์ exe และไฟล์ dll อื่น ๆ
ไฟล์ EXE เป็นไฟล์ปฏิบัติการซึ่งทำงานในกระบวนการแยกต่างหากซึ่งจัดการโดย OS

2) DLL ไม่สามารถใช้งานได้โดยตรง ไฟล์เหล่านี้เป็นไฟล์แยกต่างหากที่มีฟังก์ชันที่สามารถเรียกใช้โดยโปรแกรมและ DLL อื่น ๆ เพื่อทำการคำนวณและฟังก์ชันต่างๆ
EXE คือโปรแกรมที่สามารถเรียกใช้งานได้ เช่นโปรแกรม Windows

3) Reusability
DLL: สามารถนำกลับมาใช้กับแอปพลิเคชันอื่น ๆ ได้ ตราบใดที่ผู้เขียนโค้ดรู้จักชื่อและพารามิเตอร์ของฟังก์ชันและโพรซีเดอร์ในไฟล์ DLL
EXE: สำหรับวัตถุประสงค์เฉพาะเท่านั้น

4) DLL จะแชร์กระบวนการและพื้นที่หน่วยความจำเดียวกันของแอปพลิเคชันการโทรในขณะที่
EXE สร้างกระบวนการและพื้นที่หน่วยความจำแยกกัน

5) ใช้
DLL: คุณต้องการให้แอปพลิเคชั่นจำนวนมากใช้งานได้ แต่คุณไม่ต้องการให้ซอร์สโค้ดแก่พวกเขาคุณไม่สามารถคัดลอกวางโค้ดสำหรับปุ่มในทุกโปรแกรมได้ดังนั้นคุณจึงตัดสินใจว่าต้องการสร้าง DL- ไลบรารี (DLL)

EXE: เมื่อเราทำงานกับเทมเพลตโครงการเช่น Windows Forms Applications, Console Applications, WPF Applications และ Windows Services พวกเขาจะสร้างแอสเซมบลี exe เมื่อคอมไพล์

6) ความคล้ายคลึงกัน:
ทั้ง DLL และ EXE เป็นไฟล์ไบนารีที่มีโครงสร้างซ้อนกันที่ซับซ้อนซึ่งกำหนดโดยรูปแบบ Portable Executable และไม่ได้ตั้งใจให้ผู้ใช้สามารถแก้ไขได้


4

สองสิ่ง: ส่วนขยายและแฟล็กส่วนหัวที่เก็บไว้ในไฟล์

ทั้งสองไฟล์เป็นไฟล์ PE ทั้งสองแบบมีเค้าโครงเดียวกัน DLL เป็นไลบรารีดังนั้นจึงไม่สามารถเรียกใช้งานได้ หากคุณพยายามเรียกใช้คุณจะได้รับข้อผิดพลาดเกี่ยวกับจุดเข้าที่หายไป EXE คือโปรแกรมที่สามารถเรียกใช้งานได้ มันมีจุดเข้า แฟล็กภายในส่วนหัว PE ระบุว่าเป็นไฟล์ประเภทใด (ไม่เกี่ยวข้องกับนามสกุลไฟล์) ส่วนหัว PE มีฟิลด์ที่มีจุดเริ่มต้นสำหรับโปรแกรมอยู่ ใน DLL ไม่ได้ใช้ (หรืออย่างน้อยก็ไม่ใช้เป็นจุดเริ่มต้น)

ข้อแตกต่างเล็กน้อยประการหนึ่งคือในกรณีส่วนใหญ่DLLจะมีส่วนการส่งออกที่มีการส่งออกสัญลักษณ์ EXE ไม่ควรมีส่วนส่งออกเนื่องจากไม่ใช่ไลบรารี แต่ไม่มีอะไรป้องกันไม่ให้เกิดขึ้น ตัวโหลด Win32 ไม่สนใจทางใดทางหนึ่ง

นอกเหนือจากนั้นจะเหมือนกัน ดังนั้นโดยสรุปแล้ว EXE เป็นโปรแกรมที่เรียกใช้งานได้ในขณะที่ DLLs เป็นไลบรารีที่โหลดเข้าสู่กระบวนการและมีฟังก์ชันการทำงานที่เป็นประโยชน์เช่นความปลอดภัยการเข้าถึงฐานข้อมูลหรือบางอย่าง


3
+1: มีคนเพียงไม่กี่คนที่รู้ว่าในทางเทคนิคแล้วความแตกต่างมีเพียงเล็กน้อยในส่วนหัว PE
Serge Wautier

ฉันสงสัยว่าจะเกิดอะไรขึ้นในการสัมภาษณ์ถ้าคุณตอบแบบนั้น พวกเขา: "DLL กับ EXE ต่างกันอย่างไร" คุณ: "One Bit".
JMI MADISON

3

. exe คือโปรแกรม .dll เป็นไลบรารีที่. exe (หรือ. dll อื่น) อาจเรียกเข้าไป

สิ่งที่ sakthivignesh พูดอาจเป็นจริงใน. exe ตัวนั้นสามารถใช้อันอื่นได้ราวกับว่ามันเป็นไลบรารีและสิ่งนี้จะเสร็จสิ้น (ตัวอย่าง) กับคอมโพเนนต์ COM บางตัว ในกรณีนี้ "slave" .exe เป็นโปรแกรมแยกต่างหาก (พูดอย่างเคร่งครัดคือกระบวนการแยกกัน - อาจทำงานบนเครื่องแยกต่างหาก) แต่โปรแกรมที่ยอมรับและจัดการคำขอจากโปรแกรม / ส่วนประกอบอื่น ๆ

อย่างไรก็ตามหากคุณเลือก. exe และ. dll แบบสุ่มจากโฟลเดอร์ในไฟล์โปรแกรมของคุณโอกาสที่ COM ไม่เกี่ยวข้อง - เป็นเพียงโปรแกรมและไลบรารีที่เชื่อมโยงแบบไดนามิก

การใช้ Win32 APIs โปรแกรมสามารถโหลดและใช้ DLL โดยใช้ฟังก์ชัน LoadLibrary และ GetProcAddress API IIRC มีฟังก์ชันที่คล้ายกันใน Win16

COM เป็นวิวัฒนาการของแนวคิด DLL ในหลาย ๆ ด้าน แต่เดิมสรุปได้ว่าเป็นพื้นฐานสำหรับ OLE2 ในขณะที่. NET เป็นลูกหลานของ COM DLL มีมาตั้งแต่ Windows 1, IIRC เดิมเป็นวิธีการแบ่งปันรหัสไบนารี (โดยเฉพาะ API ระบบ) ระหว่างโปรแกรมที่ทำงานอยู่หลายโปรแกรมเพื่อลดการใช้หน่วยความจำ


2

ระบบจะมองเห็น EXE เป็นโปรแกรมปฏิบัติการ Win32 ทั่วไป จุดเริ่มต้นหมายถึงตัวโหลดขนาดเล็กที่เริ่มต้นรันไทม์. NET และบอกให้โหลดและดำเนินการแอสเซมบลีที่มีอยู่ใน EXE ระบบจะมองเห็น DLL เป็น Win32 DLL แต่ส่วนใหญ่จะไม่มีจุดเข้าใช้งาน รันไทม์. NET เก็บข้อมูลเกี่ยวกับแอสเซมบลีที่มีอยู่ในส่วนหัวของตัวเอง

dll คือชุดของฟังก์ชันที่ใช้ซ้ำได้โดยที่. exe เป็นไฟล์ปฏิบัติการซึ่งอาจเรียกใช้ฟังก์ชันเหล่านี้


1
รันไทม์. NET ไม่มีส่วนเกี่ยวข้องกับ. exe หรือ. dll เป็นไฟล์รหัสเครื่องไบนารี (หากไฟล์เหล่านี้สร้างขึ้นในภาษาโปรแกรมบางภาษาที่ใช้รันไทม์. NET ดังนั้นรันไทม์. NET จะเกี่ยวข้อง แต่นั่นเป็นความรับผิดชอบของ exe code เองไม่ใช่ตัวโหลดระบบปฏิบัติการ)
Ped7g

1

exe เป็นโปรแกรมปฏิบัติการในขณะที่ DLL เป็นไฟล์ที่สามารถโหลดและดำเนินการโดยโปรแกรมแบบไดนามิก


6
อาจมีคนรู้สึกว่าคำตอบของคุณไม่ละเอียดพอ
JesperE

ผู้คนอาจไม่รู้ว่าโปรแกรมปฏิบัติการคืออะไรและนั่นก็กลายเป็นคำถามใหม่ทั้งหมด
Mindless

1

● .exe และ dll เป็นโค้ด c # เวอร์ชันคอมไพล์ซึ่งเรียกอีกอย่างว่าแอสเซมบลี

● .exe เป็นไฟล์ปฏิบัติการแบบสแตนด์อโลนซึ่งหมายความว่าสามารถเรียกใช้งานได้โดยตรง

● .dll เป็นส่วนประกอบที่ใช้ซ้ำได้ซึ่งไม่สามารถดำเนินการได้โดยตรงและต้องใช้โปรแกรมอื่นในการดำเนินการ


0

ความแตกต่างใน DLL และ EXE:

1) DLL คือ In-Process Component ซึ่งหมายถึงการทำงานในพื้นที่หน่วยความจำเดียวกันกับกระบวนการไคลเอ็นต์ EXE เป็นส่วนประกอบนอกกระบวนการซึ่งหมายความว่ามันทำงานในพื้นที่หน่วยความจำแยกต่างหาก

2) DLL มีฟังก์ชันและขั้นตอนที่โปรแกรมอื่นสามารถใช้ได้ (ส่งเสริมความสามารถในการใช้ซ้ำ) ในขณะที่ EXE ไม่สามารถแชร์กับโปรแกรมอื่นได้

3) DLL ไม่สามารถทำงานได้โดยตรงเนื่องจากถูกออกแบบมาให้โหลดและเรียกใช้โดยโปรแกรมอื่น EXE เป็นโปรแกรมที่เรียกใช้งานโดยตรง


0

สำหรับผู้ที่ต้องการคำตอบที่กระชับ

  • หากแอสเซมบลีถูกคอมไพล์เป็นไลบรารีคลาสและจัดเตรียมประเภทสำหรับแอสเซมบลีอื่น ๆ ที่จะใช้แสดงว่าแอสเซมบลีนั้นมีนามสกุล ifle .dll(ไลบรารีลิงก์ไดนามิก) และไม่สามารถดำเนินการแบบสแตนด์อโลนได้

  • ในทำนองเดียวกันหากแอสเซมบลีถูกคอมไพล์เป็นแอพพลิเคชั่นแสดงว่าแอสเซมบลีนั้นมีนามสกุลไฟล์.exe(เรียกใช้งานได้) และสามารถดำเนินการแบบสแตนด์อโลนได้ ก่อนหน้า. NET Core 3.0 แอปคอนโซลถูกคอมไพล์เป็น. dll fles และต้องดำเนินการโดยคำสั่ง dotnet run หรือโฮสต์ปฏิบัติการ - ที่มา


-2

ความแตกต่างที่แน่นอนที่สำคัญระหว่าง DLL และ EXE ที่ DLL ไม่มีจุดเริ่มต้นและ EXE ทำ หากคุณคุ้นเคยกับ c ++ คุณจะเห็นว่า build EXE มีฟังก์ชันการป้อน main () และ DLL ไม่มี :)


อย่าคิดอย่างนั้น ดูที่นี่msdn.microsoft.com/en-us/library/ms682596(VS.85).aspx
Aamir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.