Khác biệt giữa bản sửa đổi của “Dynamic Link Library”

Nội dung được xóa Nội dung được thêm vào
Cheers!-bot (thảo luận | đóng góp)
n →‎Chú thích: clean up, replaced: {{reflist}} → {{Tham khảo}} using AWB
Cheers!-bot (thảo luận | đóng góp)
n Robot: Sửa đổi hướng; sửa cách trình bày
Dòng 1:
{{Infobox file format
| name = Dynamic link library
| icon = [[HìnhTập tin:DLL icon on Windows Vista.png|64px|DLL Icon]]
| extension = .dll
| mime = application/x-msdownload
Dòng 16:
}}
{{chú thích trong bài}}
'''Thư viện liên kết động''' ([[tiếng Anh]]: Dynamic Link Library - viết tắt: '''DLL''') là một thành phần của các phần mềm. Đặc điểm của nó là có tính khả chuyển cao, nhờ đó mà một DLL có thể được gắn vào một hoặc nhiều phần mềm khác nhau. '''DLL''' còn là đuôi của một tập tin chạy trên [[hệ điều hành]] [[Microsoft Windows|Windows]] (''.dll'').
 
== Mở đầu ==
Thư viện liên kết động, đúng như tên gọi của nó, là một [[thư viện (phần mềm)|thư viện]] cho phép các ứng dụng có thể liên kết đến và sử dụng nó. Nó được xem là một tổ hợp các hàm và dữ liệu mà có thể được sử dụng bởi nhiều ứng dụng khác nhau ở cùng một thời điểm. ''Ví dụ'': thư viện user32.dll hoặc kernel32.dll là các thư viện liên kết động mà mỗi ứng dụng Windows đều phải dùng đến.
 
Khi đã được viết và đóng gói trong một DLL, một hàm có thể được sử dụng ở bất cứ ứng dụng nào dưới dạng mã máy của nó mà không phải quan tâm đến mã nguồn nó được viết chi tiết ra sao. Với các ứng dụng trước kia, ta có thể đính kèm [[tập tin|file]] mã nguồn và sử dùng các hàm trong chương trình; tuy nhiên, giả sử như để có thể thao tác với [[máy in]], in một nội dung ta cần gọi hàm print() và ta đã có mã nguồn của hàm print này. Giả sử như không có DLL, thì bất cứ ứng dụng nào muốn sử dụng hàm print() sẽ bao gồm cả hàm này vào trong mã nguồn: từ chương trình [[Microsoft Word|Word]], [[Microsoft Excel|Excel]], [[Internet Explorer]],... như vậy trong hệ thống sẽ có rất nhiều [[bản sao]] của hàm print() này, làm cho dung lượng để chứa các [[chương trình]] tăng lên. Ngoài ra, khi [[phần cứng]] thay đổi, ta lại phải thay đổi mã nguồn của hàm print() để nó hoạt động đúng (nếu cần), việc này đẫn tới việc thay đổi theo dây chuyền đến các ứng dụng, gây ra rất nhiều khó khăn. Sau đây ta sẽ tìm hiểu chi tiết về ưu nhược điểm của việc sử dụng thư viện liên kết động. Các thư viện liên kết động là một thành phần không thể thiếu tạo nên [[hệ điều hành]] [[Microsoft Windows|Windows]]. Ở đó, việc quản lý, trao đổi với [[phần cứng]] hay [[thiết bị ngoại vi]] đều thông qua các hàm có sẵn trong windows mà ta hay gọi là Windows API. Thay vì ta phải đưa lệnh [[điều khiển]] cho màn hình vẽ lên một cửa sổ giao diện như các ứng dụng, thì ta chỉ cần gọi một hàm trong một file DLL nào đó, hệ thống sẽ đảm bảo kết quả như ý muốn.
 
== Ưu và nhược điểm của thư viện liên kết động ==
 
=== Giảm không gian sử dụng của [[bộ nhớ]] ===
Hàm và dữ liệu trong các DLL được chia sẻ bởi các ứng dụng dùng nó. Như trong ví dụ ở trên, các ứng dụng [[Microsoft Word|Winword]], [[Microsoft Excel]], [[Internet Explorer]] sẽ dùng chung một hàm <code>print()</code> đã được biên dịch thành mã máy và để trong một DLL nào đó, mà không cần phải bao gồm toàn bộ mã nguồn của hàm. Bên cạnh đó, ta cũng có thể giảm được dung lượng [[bộ nhớ]] của [[chươngphần trình máy tínhmềm|chương trình]] tùy vào cách dùng các hàm DLL (Run-time hay Load-time, sẽ được trình bày sau): ứng dụng của ta sẽ chỉ nạp các hàm này khi nào dùng đến.
 
Mã trong DLL nằm trong khu vực chỉ cho đọc (read-only) và được nạp vào các trang nhớ đánh dấu read-only. Nó cho phép hệ thống [[ánh xạ]] DLL vào trong không gian địa chỉ nhớ của các tiến trình sử dụng nó. Và như vậy, DLL được nạp chỉ một lần, và nếu một tiến trình yêu cầu sử dụng nó, [[hệ điều hành]] chỉ việc ánh xạ DLL tới không gian địa chỉ của ứng dụng gọi DLL.
Dòng 36:
 
=== Có thể đóng gói và đưa vào chương trình khác ===
Khi đã xây dựng được một DLL với các chức năng hợp lý, ta có thể sử dụng nó trong bất cứ ứng dụng nào mà ta cảm thấy thích hợp. Ví dụ trong một ứng dụng nhỏ, ta có tập hợp các hàm chuyển đổi giá trị từ String sang ngày tháng và đóng gói nó vào trong một DLL. Khi đó, ở một ứng dụng khác, khi có nhu cầu chuyển đổi như trên, thì ta sẽ không phải viết lại các hàm hoặc đính kèm [[mã nguồn]] của các hàm đó vào chương trình đó nữa mà sử dụng trực tiếp DLL mà ta đã [[trình biên dịch|biên dịch]].
 
=== Tạo ra khả năng tương tác giữa các [[ngôn ngữ lập trình]] ===
Dòng 63:
Khu vực lưu trữ mã bao gồm các lớp và các hàm độc lập (không có quan hệ qua lại) với nhau được thể hiện qua trong DLL. Trong trường hợp các lớp (class) thì tất cả các chức năng và [[dữ liệu]] đã được [[giới hạn]] trong một thực thể, nhưng với các hàm độc lập có quan hệ với nhau thì ta cũng có một số dữ liệu chia sẻ toàn cục. Các lớp và hàm có trong DLL cung cấp cho ứng dụng sử dụng được gọi là thành phần export từ DLL. Còn nếu DLL của ta sử dụng các hàm từ các DLL khác, thì chúng được gọi là thành phần import tới DLL.
 
'''''Lấy ra các lớp và hàm ở trong DLL''''': để sử dụng được các [[mã lệnh]] trong DLL mà đã [[trình biên dịch|biên dịch]], ta phải export nó ra cho các ứng dụng khác sử dụng. Có hai cách để thực hiện công việc này:
 
* Bằng cách tạo ra một module [[tập tin|file]] định nghĩa (.def) và sử dụng file này khi xây dựng DLL. Cách làm này cũng thuận tiện cho việc export các hàm theo số thứ tự hơn là theo tên (mặc định là theo tên). Lúc này ta sẽ phải xác định [[đường dẫn]] tới [[thư mục]] /DEF khi sử dụng [[trình biên tập]] để xây dựng DLL.
 
* Bằng cách sử dụng từ khóa __declspec (dllexport) trong định nghĩa hàm. Trong trường hợp muốn export các lớp, ta đặt từ khóa này sau từ khóa class. [[Trình biên dịch]] sẽ đánh dấu các hàm hay lớp này trong DLL có thể export được.
Dòng 152:
* Liên kết động ở thời điểm chạy sẽ loại bỏ được việc tạo các thư viện import. Nếu như những thay đổi trong DLL là do thứ tự export của các hàm thay đổi, ứng dụng sử dụng liên kết ở thời điểm chạy sẽ không phải liên kết lại (giả sử các lời gọi GetProcAddress với tham số là tên của hàm chứ không phải là giá trị chỉ số của hàm ), còn các ứng dụng sử dụng liên kết ở thời điểm nạp sẽ phải liên kết lại tới thư viện import mới.
 
== Chú thích ==
{{Tham khảo}}
 
== Tham khảo ==
 
[[Thể loại:Khoa học máy tính]]