dll คืออะไร?


92

นี่อาจเป็นคำถาม noobie แต่ในโลกของการพัฒนาเว็บแอปในปัจจุบันโปรแกรมเมอร์หลายคนไม่จำเป็นต้องจัดการกับ dll มากนักดังนั้นจึงไม่ต้องกังวลที่จะเรียนรู้เกี่ยวกับจุดประสงค์ของพวกเขา

dll คืออะไร?

  1. ใช้ทำอะไร?
  2. มันทำงานอย่างไร?
  3. คุณจะสร้างได้อย่างไร?
  4. การสร้างสิ่งที่เหมาะสมในสถานการณ์ใด

ฉันได้รับแจ้งว่า dll ใช้ในการจัดเก็บไลบรารีของฟังก์ชัน แต่นอกเหนือจากนั้นฉันไม่รู้อะไรมาก หวังว่าจะมีใครบางคนที่นี่สามารถให้ความกระจ่างแก่ฉันได้ดังนั้นในที่สุดฉันก็เลิกสงสัยว่าไฟล์. dll ทั้งหมดในไดเรกทอรี Windows ของฉันกำลังทำอะไรอยู่


ควรใช้วิกิชุมชนสำหรับกรณีที่ไม่มีคำตอบที่แท้จริงสำหรับคำถามของคุณ นี่เป็นคำถามที่ถูกต้องและด้วยการเลือกโหมดวิกิชุมชนคุณจะป้องกันไม่ให้ตัวเองและผู้ตอบได้รับตัวแทนในคำถามนี้
Serafina Brocious

คำถามนี้มีแนวโน้มที่จะกลายเป็นคำถามยอดนิยม
Tamas Czinege

1
คุณคิดว่า? อาจจะสำหรับการดู แต่ไม่น่าจะได้รับการโหวต ... ยังไงก็ตอบไป 4 ครั้ง
Omar Kooheji

2
นี่คือ Googleable เล็กน้อย ...
annakata

3
ใช่นี่เป็น Google ได้ แต่ฉันไม่พบคำอธิบายที่กระชับที่ดีมากนักโดยเฉพาะอย่างยิ่งสำหรับคำถามเกี่ยวกับการสร้างและเวลาที่เหมาะสมที่จะใช้
Daniel

คำตอบ:


56

DLL คือไลบรารีลิงก์แบบไดนามิก เป็นชุดของรหัสและ / หรือข้อมูลซึ่งอาจถูกใช้โดยแอปพลิเคชันต่างๆ (หรือไลบรารี / โมดูลอื่น ๆ )

ดังนั้นตัวอย่างเช่นวิธีการทั่วไปในการประมวลผลไฟล์การทำงานกับคอมโพเนนต์ GUI และอื่น ๆ จะมีอยู่ในไลบรารีดังนั้นแอปพลิเคชันหลายตัวอาจใช้ฟังก์ชันการทำงานเดียวกัน สิ่งนี้ไม่เพียงช่วยลดความจำเป็นในการสร้างสิ่งเดียวกันหลาย ๆ ครั้ง แต่ยังช่วยให้มั่นใจได้ว่าเช่นกล่องโต้ตอบทั่วไปจะเหมือนกันระหว่างแอปพลิเคชัน

ไลบรารีสามารถโหลดได้ที่รันไทม์และแชร์ระหว่างแอพพลิเคชั่นต่างๆพร้อมกัน สิ่งนี้เรียกว่าการเชื่อมโยงแบบไดนามิก

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

อย่างไรก็ตามการลิงก์แบบคงที่ไม่ใช่ตัวเลือกเสมอไป เช่นคุณไม่สามารถเชื่อมโยงแอปพลิเคชัน. NET แบบคงที่ ผู้ใช้ต้องมีไลบรารี. NET เพื่อรันแอ็พพลิเคชัน. NET และไลบรารี (หรือแอสเซมบลีตามที่เรียกใน. NET) ที่รันไทม์

DLL ถูกสร้างขึ้นโดยเครื่องมือเดียวกับที่ใช้ในการสร้างแอปพลิเคชัน รายละเอียดเฉพาะขึ้นอยู่กับเครื่องมือที่ใช้เป็นอย่างมาก


ขอบคุณสำหรับคำตอบสิ่งหนึ่งที่ฉันสงสัยคือแอปพลิเคชั่นรู้ได้อย่างไรว่ามีฟังก์ชั่นอะไรใน dll? dll เองเป็นรหัสเครื่องทั้งหมดใช่ไหม ลายเซ็นฟังก์ชันสาธารณะใน dll ถูกเปิดเผยอย่างไร
Daniel

ฉันไม่รู้เกี่ยวกับภาษาส่วนใหญ่ แต่การเติมข้อความอัตโนมัติของ Visual Studio จะแสดงฟังก์ชันทั้งหมดที่มีให้คุณเห็น
แกรนท์

1
แต่การเติมข้อความอัตโนมัติจะค้นหาฟังก์ชันที่มีอยู่ได้อย่างไรหาก dll เป็นเพียงรหัสเครื่อง
Daniel

2
เครื่องสามารถอ่านรหัสเครื่องได้ DLL สามารถมีไอคอนสตริงแบบอักษร น่าจะมีรายการของสิ่งที่อยู่ในนั้น
แกรนท์

1
Visual C ++ มีเครื่องมือที่เรียกว่า dumpbin - การเรียกใช้ "dumpbin / export anything.dll" จะบอกคุณว่าฟังก์ชันและสิ่งใดบ้างที่ถูกส่งออก (เช่นมีให้ใช้งานโดยโปรแกรมที่โหลด DLL)
Graeme Perrow

29

DLL = ไดนามิกลิงก์ไลบรารี

ชื่อนี้ค่อนข้างสื่อถึงสิ่งที่พวกเขาประสบความสำเร็จ

ห้องสมุด

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

ลิงค์

คุณสามารถ "เชื่อมโยง" ไลบรารีกับแอปพลิเคชันเพื่อไม่ให้ตรรกะในไลบรารีถูกรวบรวมลงในแอปพลิเคชันโดยตรง

ไดนามิก

ไลบรารีสามารถโหลดได้ตามต้องการ แทนที่จะโหลด EXE ตัวมหึมาลงในหน่วยความจำระบบปฏิบัติการจะโหลดเฉพาะส่วนที่จำเป็นเท่านั้น นอกจากนี้หากมีการแชร์ DLL ระหว่างแอปพลิเคชันระบบปฏิบัติการสามารถปรับวิธีโหลดไลบรารีและแชร์ระหว่างแอปได้อย่างเหมาะสม


10

ไฟล์ DLL (ไดนามิกลิงก์ไลบรารี)สามารถอธิบายได้ว่าเป็น "โปรแกรมย่อย" ขนาดเล็กซึ่งมีไว้เพื่อช่วยให้โปรแกรมที่ใหญ่กว่าทำงานได้ดี พวกเขาให้วิธีการเชื่อมโยงทรัพยากรฮาร์ดแวร์และซอฟต์แวร์ต่างๆ (ณ จุดต่างๆในเซสชันรันไทม์) กับโปรแกรมปฏิบัติการหลักที่พวกเขาอาศัยอยู่บนพื้นฐาน "ตามที่ต้องการ" ซึ่งจะช่วยลดความจำเป็นในการโหลดทุกสิ่งที่เกี่ยวข้องกับโปรแกรมปฏิบัติการหลักลงใน RAM ของคอมพิวเตอร์ (หน่วยความจำเข้าถึงโดยสุ่ม) เมื่อโปรแกรมทำงานครั้งแรก

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

ความก้าวหน้าครั้งสำคัญ:

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

ข้อควรพิจารณา:

โดยปกติแล้ว DLL จะเป็นเวอร์ชันเฉพาะ โปรแกรมที่ทำงานได้ดีเช่นเวอร์ชัน 1 ของโปรแกรม (หรือภาษาโปรแกรมแล้วแต่กรณี) อาจทำงานได้ไม่ดีกับเวอร์ชัน 2 กฎทั่วไปคือ DLL ในเวอร์ชันเก่ามักจะไม่สามารถทำงานได้ ได้ดีกับเวอร์ชันที่ใหม่กว่า แต่เวอร์ชันที่ใหม่กว่านั้นสามารถทำงานได้ดีกับโปรแกรมเวอร์ชันเก่าหรือภาษาโปรแกรม


7

ไลบรารีที่เชื่อมโยงแบบไดนามิก

เพื่อให้คุณเป็นตัวอย่างหากคุณมี DLL ของผู้อื่นโหลดลงในแอปพลิเคชันของคุณคุณสามารถใช้บิตของการเขียนโปรแกรมได้

คุณสามารถโหลด DLL ที่สร้างตัวเลขสุ่มที่ขึ้นต้นด้วย "5" หรืออะไรก็ได้

ในโปรแกรมของคุณคุณสามารถเรียก CrazyDLL.GenerateRandomNumbersSorta () และจะส่งคืนหมายเลข

สำหรับตัวอย่างโลกแห่งความเป็นจริงฉันมี DLL ที่รวมกล่องข้อความ 4 ช่อง (คุณจะใช้สิ่งเหล่านี้เพื่อพิมพ์ที่อยู่ IP) และจะยอมรับเฉพาะตัวเลขที่น้อยกว่า 256 โดยอัตโนมัติและจัดการกับการกดปุ่ม backspace เพื่อข้ามไปยังกล่องข้อความก่อนหน้า

ฉันได้สร้าง DLL ด้วยรหัสนั้นและตอนนี้สิ่งที่ฉันต้องทำคือลากและวางคอลเลกชันกล่องข้อความที่อยู่ IP เหล่านั้นเพิ่มเติมโดยไม่ต้องทำซ้ำรหัสนั้นซ้ำแล้วซ้ำอีก

DLL เดียวกันยังมีฟังก์ชันสำหรับการแปลงที่อยู่ IP เป็นสตริงเลขฐานสิบหกและรหัสที่มีประโยชน์อื่น ๆ



1

DLL = ไลบรารีลิงก์โหลดไดนามิก ดังที่คุณได้รับการบอกกล่าวโดยพื้นฐานแล้วมันเป็นชุดของฟังก์ชันคลาส C ++ และ / หรือตัวแปรส่วนกลาง คุณสามารถโหลด DLL แบบคงที่ (กล่าวคือระบบปฏิบัติการจะโหลดโดยอัตโนมัติเมื่อโปรแกรมของคุณเริ่มทำงาน) หรือแบบไดนามิก (โปรแกรมของคุณโหลดอย่างชัดเจน) ณ จุดนั้นฟังก์ชันและสิ่งต่างๆภายใน DLL จะพร้อมใช้งานในโปรแกรม

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

เหตุผลหลักที่คุณต้องการทำเช่นนี้คือการห่อหุ้มโค้ดบางส่วนไว้ในที่เดียวและใช้จาก exe หลายตัวแทนที่จะเชื่อมโยงโค้ดเข้ากับโค้ดแต่ละอัน

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.