Dll là gì?


90

Đây có thể là một câu hỏi rất khó hiểu, nhưng trong thế giới phát triển ứng dụng web ngày nay, nhiều lập trình viên không cần phải xử lý nhiều dll, và do đó không bận tâm tìm hiểu về mục đích của chúng.

Vậy dll là gì?

  1. Cái này được dùng để làm gì?
  2. Làm thế nào nó hoạt động?
  3. Làm thế nào để bạn tạo một cái?
  4. Trong những tình huống nào thì việc tạo một cái thích hợp?

Tôi đã được nói rằng dll được sử dụng để lưu trữ các thư viện của các hàm, nhưng ngoài ra thì tôi không biết nhiều. Hy vọng rằng ai đó ở đây có thể khai sáng cho tôi để cuối cùng tôi có thể ngừng tự hỏi tất cả các tệp .dll đó trong thư mục Windows của tôi đang làm gì.


Wiki cộng đồng nên được sử dụng cho những trường hợp không có câu trả lời thực sự cho câu hỏi của bạn. Đây là một câu hỏi hợp lệ và bằng cách chọn chế độ wiki cộng đồng, bạn ngăn chính mình và người trả lời nhận được đại diện cho câu hỏi này.
Cody Brocious

câu hỏi này có tiềm năng để trở thành một trong rất phổ biến
Tamas Czinege

1
Bạn nghĩ? Có thể cho lượt xem nhưng không có khả năng bình chọn ... Dù sao nó đã được trả lời 4 lần.
Omar Kooheji

2
đây là trivially googleable ...
annakata

3
Yah cái này có thể tìm kiếm được, nhưng tôi thực sự không tìm thấy nhiều giải thích ngắn gọn hay về nó, đặc biệt là đối với câu hỏi về việc tạo một cái và khi nào thì thích hợp để sử dụng nó.
Daniel

Câu trả lời:


55

DLL là một thư viện liên kết động. Nó là một tập hợp mã và / hoặc dữ liệu, có thể được sử dụng bởi một số ứng dụng (hoặc các thư viện / mô-đun khác).

Vì vậy, ví dụ, các phương pháp phổ biến để xử lý tệp, làm việc với các thành phần GUI, v.v. được tạo sẵn trong thư viện để một số ứng dụng có thể sử dụng cùng một chức năng. Điều này không chỉ làm giảm nhu cầu xây dựng cùng một nội dung nhiều lần, mà còn đảm bảo rằng các hộp thoại chung giống nhau giữa các ứng dụng.

Các thư viện có thể được tải trong thời gian chạy và do đó được chia sẻ giữa các ứng dụng đồng thời khác nhau. Đây được gọi là liên kết động.

Trong một số trường hợp, thư viện có thể được bao gồm trong chính ứng dụng. Đây được gọi là liên kết tĩnh. Liên kết tĩnh giúp triển khai dễ dàng hơn với chi phí linh hoạt vì mỗi ứng dụng khác nhau sẽ tải cùng một bản sao của DLL.

Tuy nhiên, liên kết tĩnh không phải lúc nào cũng là một lựa chọn. Ví dụ: bạn không thể liên kết tĩnh một ứng dụng .NET. Người dùng phải có các thư viện .NET để chạy ứng dụng .NET và các thư viện (hoặc hội đồng như chúng được gọi trong .NET) được tải trong thời gian chạy.

Các tệp DLL được tạo bởi cùng một công cụ được sử dụng để tạo ứng dụng. Các chi tiết cụ thể phụ thuộc rất nhiều vào các công cụ được sử dụng.


Cảm ơn câu trả lời, một điều tôi đang thắc mắc là làm thế nào để các ứng dụng biết những chức năng có sẵn trong dll? Bản thân dll là tất cả mã máy phải không? Vì vậy, làm thế nào các chữ ký chức năng công cộng trong dll được tiếp xúc?
Daniel

Tôi không biết về hầu hết các ngôn ngữ, nhưng tính năng tự động hoàn thành của Visual Studio sẽ hiển thị cho bạn tất cả các chức năng có sẵn.
Grant

1
Nhưng làm thế nào để tự động hoàn thành tìm ra các chức năng có sẵn nếu dll chỉ là mã máy?
Daniel

2
Máy có thể đọc mã máy. DLL có thể chứa các biểu tượng, chuỗi, phông chữ. Đáng tiếc là có một danh sách những gì nó chứa ở đâu đó trong đó.
Grant

1
Visual C ++ chứa một công cụ gọi là dumpbin - chạy "dumpbin / export anything.dll" sẽ cho bạn biết những hàm và nội dung nào được xuất (tức là có sẵn để sử dụng bởi các chương trình tải DLL).
Graeme Perrow

29

DLL = Thư viện liên kết động

Cái tên thực sự mô tả khá nhiều về những gì họ đạt được.

Thư viện

Cho phép bạn tách mã cho một miền sự cố cụ thể vào một vị trí duy nhất. Sau đó, chia sẻ điều này giữa nhiều ứng dụng. Thư viện có thể được đổi sang thư viện khác bất kỳ lúc nào để sửa lỗi hoặc thêm chức năng.

Liên kết

Bạn có thể "Liên kết" thư viện với một ứng dụng để logic trong thư viện không được biên dịch trực tiếp vào ứng dụng.

Động

Thư viện có thể được tải theo yêu cầu. Thay vì tải một EXE khổng lồ vào bộ nhớ, hệ điều hành chỉ có thể tải các phần cần thiết. Ngoài ra, nếu DLL được chia sẻ giữa các ứng dụng, hệ điều hành có thể tối ưu hóa cách tải thư viện và chia sẻ nó giữa các ứng dụng.


10

Các tệp DLL (thư viện liên kết động) có thể được mô tả là "chương trình con" nhỏ nhằm giúp một chương trình lớn hơn chạy tốt. Chúng cung cấp một phương tiện liên kết các tài nguyên phần cứng và phần mềm khác nhau (tại các điểm khác nhau trong các phiên thời gian chạy của nó) với chương trình thực thi chính mà chúng dựa trên, trên cơ sở "khi cần thiết". Điều này giúp loại bỏ sự cần thiết phải tải mọi thứ cần làm với chương trình thực thi chính vào RAM của máy tính (bộ nhớ truy cập ngẫu nhiên) khi chương trình được chạy lần đầu tiên.

Các tài nguyên phần mềm do DLL mang theo bao gồm mã cho các chức năng chương trình khác nhau không thực sự cần thiết để giữ cho chương trình hoạt động: nghĩa là, các chức năng chỉ cần được gọi vào những thời điểm nhất định trong một phiên tính toán nhất định và thậm chí có thể không cần được gọi là gì cả. Việc tải các chức năng đó (và có thể có một số lượng đáng kể trong số chúng cho một chương trình nhất định) vào RAM của máy tính khi chương trình được chạy lần đầu tiên và sau đó giữ chúng ở đó trong suốt phiên sẽ rất lãng phí dung lượng RAM - được coi là lúc một cao cấp.

Một tiến bộ lớn:

Sự phát triển của DLL là một bước tiến lớn trong lĩnh vực máy tính, bởi vì trước khi chúng có sẵn, mọi thứ liên quan đến một chương trình (bao gồm cả các chức năng hiếm khi được sử dụng) phải được tải vào RAM khi chương trình được tải lần đầu tiên. Điều đó dẫn đến việc tính toán cực kỳ kém hiệu quả, với tốc độ chậm hơn được hiển thị bởi các chương trình khác nhau. Nó cũng rất khó để chạy đa nhiệm bằng cách chạy ngay cả một vài chương trình đơn giản, vì sự căng thẳng của người phục vụ trên RAM.

Cân nhắc:

DLL thường dành riêng cho phiên bản. Những thứ hoạt động tốt, chẳng hạn như Phiên bản 1 của chương trình (hoặc ngôn ngữ lập trình, tùy trường hợp) có thể không hoạt động tốt với Phiên bản 2. Nguyên tắc chung là các DLL trong phiên bản cũ hơn có xu hướng không thể hoạt động tốt với phiên bản mới hơn, nhưng những phiên bản mới hơn nói chung có thể hoạt động khá tốt với phiên bản cũ của chương trình hoặc ngôn ngữ lập trình.


7

Thư viện được liên kết động.

Để cung cấp cho bạn một ví dụ, Nếu bạn có DLL của người khác được tải vào ứng dụng của bạn, bạn có thể sử dụng các bit lập trình từ nó.

Bạn có thể tải một DLL tạo ra các số ngẫu nhiên luôn bắt đầu bằng "5" hoặc một cái gì đó.

Trong chương trình của bạn, bạn có thể gọi CrazyDLL.GenerateRandomNumbersSorta () và nó sẽ trả về số.

Đối với một ví dụ trong thế giới thực, tôi có DLL kết hợp 4 hộp văn bản (bạn sẽ sử dụng các hộp văn bản này để nhập địa chỉ IP) và nó tự động chỉ chấp nhận các số nhỏ hơn 256 và xử lý việc nhấn phím xóa lùi để chuyển đến hộp văn bản trước đó.

Tôi đã tạo một DLL với mã đó và bây giờ tất cả những gì tôi phải làm là kéo và thả thêm các bộ sưu tập hộp văn bản địa chỉ IP đó mà không cần phải sao chép tất cả mã đó nhiều lần.

DLL tương tự cũng có chức năng chuyển đổi địa chỉ IP thành chuỗi thập lục phân và mã hữu ích khác.


1

Từ Thư viện MSDN :

Thư viện liên kết động (DLL) là một mô-đun chứa các chức năng và dữ liệu có thể được sử dụng bởi một mô-đun khác (ứng dụng hoặc DLL).


1

DLL = Thư viện liên kết tải động . Như bạn đã nói, về cơ bản nó là một tập hợp các hàm, các lớp C ++ và / hoặc các biến toàn cục. Bạn có thể tải DLL tĩnh (nghĩa là HĐH tải nó tự động khi chương trình của bạn khởi động) hoặc động (chương trình của bạn tải nó một cách rõ ràng), lúc này các chức năng và nội dung bên trong DLL có sẵn cho chương trình của bạn.

Tạo một EXE tương tự như tạo EXE, ngoại trừ không cần phải có một main()hàm. Có các chỉ thị trình liên kết để yêu cầu trình liên kết tạo một DLL chứ không phải EXE.

Lý do chính bạn muốn làm điều này là gói một số mã ở một nơi và sử dụng nó từ nhiều exe, thay vì liên kết mã thành từng đoạn.

Một lý do có phần lịch sử là exe của bạn có thể nhỏ hơn vì một số mã thực tế nằm trong một tệp khác. Điều này có nghĩa là lượng không gian được exe của bạn chiếm trong bộ nhớ có thể nhỏ hơn. Trên các hệ thống hiện đại, đây không phải là một vấn đề như trước đây, mặc dù nó vẫn có thể là một vấn đề trên Windows Mobile.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.