Tên bài viết: Hướng dẫn từng bước tạo thư viện (ActiveX DLL) bằng VB
Tác giả: thanh3em
Cấp độ bài viết: Từ căn bản đến nâng cao
Tóm tắt: Học , hiểu và làm ActiveX DLL ... một việc không thể thiếu khi lập trình
Chắc các bạn mới học nghề chưa hiểu rõ hết tác dụng của thằng thư viện liên kết động nhỉ, tại sao phải tạo nó và tạo nó như thế nào, có khó không ?
Câu trả lời là không khó, rất dễ, bạn nào biết cách tạo và sử dụng hàm và thủ tục thì tạo thư viện liên kết động chỉ dựa vào chừng nấy thui
KỲ 1: Trước hết, bạn phải rõ thư viện động là cái chi chi và nó hoạt động như thế nào
Bản thân tên gọi “thư viện liên kết động” làm cho ta liên tưởng đến các thư viện cho phép các ứng dụng có thể liên kết đến và sử dụng nó. Thư viện liên kết động là modul chứa 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
(Theo Wikipedia - tại tui không biết nói cho với các bạn rõ nên đành phải nhờ thằng Wikipedia giúp 1 tay zậy :-D )
Các bạn thấy rõ đấy, các hàm API từ trước đến giờ bạn sử dụng và gọi chẳng là chỉ là 1 hàm nằm trong 1 thư viện liên kết động. Thư viện liên kết động có thể được tạo bới bất cứ ngôn ngữ lập trình gì nhưng cách gọi và sử dụng nó thì rất đơn giản, kô hề phụ thuộc vào bất cứ ngôn ngữ nào. Vì thế bạn có thể tự tạo ra bộ thư viện liên kết động cho riêng mình và hoặc là Add thằng vào chương trình luôn (chỉ có thư viện do VB mới Add được thui) hoặc gọi giống như 1 hàm API (do nó được viết bởi các ngôn ngữ khác như C nên kô add được)
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 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. Sau đây là ưu nhược điểm của thư viện liên kết động DLL
Ưu 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 Winword, Excel, Internet Explorer sẽ dùng chung một hàm print() đã được biên dịch thành mã máy và để trong một DLL nào đó, mà không cần phải include 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ươ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.
- Giảm Swapping (tráo đổi): ta tưởng tượng có hai tiến trình sử dụng cùng một DLL, một tiến trình kết thúc công việc của nó và thoát ra. Nhưng DLL sẽ không gỡ bỏ ra khỏi bộ nhớ vì DLL quản lý thời gian tồn tại của nó bằng cách giữ một bộ đếm tham khảo cho các tiến trình sử dụng nó. Mỗi khi có một tiến trình nào đó yêu cầu sử dùng DLL, bộ đếm tham khảo sẽ tăng giá trị của nó lên 1; còn khi có một tiến trình gỡ bỏ không sử dung nữa thì bộ đếm lại giảm đi 1. DLL sẽ tự động xóa bỏ ra khỏi bộ nhớ chừng nào bộ đếm tham khảo trở về 0, trạng thái cho biết không còn có tiến trình nào sử dụng DLL nữa.
Bây giờ giả sử có một tiến trình bắt đầu chạy và yêu cầu hệ thống nạp một DLL hiện đang được dùng bởi một ứng dụng đã chạy trước đó. Chuyện gì sẽ xảy ra? Liệu hệ thống có nạp DLL một lần nữa không? Hiển nhiên là không, vì DLL được định nghĩa ra để có thể dùng chung giữa các ứng dụng khác nhau. Thành phần đã nạp DLL có tất cả các hàm và dữ liệu của nó trong bộ nhớ và hệ thống sẽ chỉ phải ánh xạ chúng tới không gian địa chỉ của tiến trình mới cho chúng hoạt động. Nó liên quan đến việc đọc các hàm và dữ liệu DLL từ trên đĩa.
- 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 đã biên dịch.
Tạo ra khả năng tương tác giữa các ngôn ngữ: Một ứng dụng có thể sử dụng các DLL viết bằng bất cứ ngôn ngữ nào. Các nhà phát triển phần mềm chỉ việc đóng gói các module của mình vào trong một DLL với ngôn ngữ ưa thích, sau đó module này có thể được sử dụng trong các ứng dụng viết bằng C++ hay Visual Basic.
Mặc dù hầu hết các ngôn ngữ đều hỗ trợ việc sử dụng thư viện liên kết động, nhưng lại có rất ít ngôn ngữ cho phép tạo ra chúng. Với việc sử dụng DLL, người ta có thể tập trung nhiều hơn vào các xử lý logic của hệ thống, mà không cần phải quan tâm đến những xử lý thông thường, mà nếu phát triển từ đầu, sẽ chi phí rất nhiều thời gian và công sức. Các công việc này đã được thực hiện bởi một người nào đó, và đóng gói dưới dạng các DLL.
- Dễ dàng đưa ra sự hỗ trợ sau khi đã chuyển giao ứng dụng cho khách hàng: nếu như ta phát hiện có một số thành phần trong ứng dụng cần phải được thay đổi và sự thay đổi này cần phải được cập nhật cho khách hàng. Đóng gói và phân phối lại toàn bộ sản phẩm đã bán cho tất cả các khách hàng của chúng ta là một công việc hết sức khó khăn. Tuy nhiên ta có thể tránh được điều này nếu như ứng dụng của ta được thiết kế tốt thành các module và đóng gói chúng trong các DLL. Khi một module nào đó cần thay đổi, ta chỉ việc đóng gói lại DLL chứa module đó và gửi tới khách hàng, cho họ cập nhật.
- DLL Hell: là khó khăn lớn nhất thỉnh thoảng gặp khi dùng DLL. Ta có thể gặp những thông báo lỗi dạng như: “The ordinal abc could not be located in the dynamic-link library xyz.dll.”; hoặc khi cài đặt một ứng dụng mới, một số chương trình khác đang bình thường bỗng nhiên bị trục trặc hoặc thậm chí không thể nạp lên để chạy được. Đó là các dấu hiệu của DLL Hell trên máy tính của ta. Nguyên nhân cơ bản của sự cố trên là do chương trình cài đặt không kiểm tra phiên bản của các DLL trước khi sao lưu nó vào trong thư mục hệ thống. Khi một DLL mới thay thế một DLL cũ có sẵn, và nếu DLL mới này có một số thay đổi lớn làm cho nó không thể tương thích ngược lại với các chương trình sử dụng phiên bản cũ, nó sẽ làm rối loạn chương trình đó.
(Bây giờ các bạn đã hiểu thế nào thư viện liên kết động chưa, công việc tiếp theo của ta là tạo 1 thư viện liên kết động, hẹn cac bạn ở kỳ 2 nhé)
------------------------------------------------------------------------
Bài học này của tác giả thanh3em ... Link : http://quantoancity.com/caulacbovb/foru ... 390#p17578




