CHƯƠNG MỞ ĐẦU
1 Khái niệm thư viện liên kết động1 Khái niệm thư viện liên kết động
DLL là các thư viện liên kết động chứa các hàm và DLL là các thư viện liên kết động chứa các hàm và
thủ tục mà ta có thể sử dụng để bổ sung cho thủ tục mà ta có thể sử dụng để bổ sung cho
những hàm còn thiếu của một ngôn ngữ lập trình. những hàm còn thiếu của một ngôn ngữ lập trình.
Có hai loại DLL là Windows API DLL và Third-Có hai loại DLL là Windows API DLL và Third-
Party DLL Party DLL
Windows API DLL là những tập tin DLL đã được Windows API DLL là những tập tin DLL đã được
cài sẵn theo cáchệ điều hành-Windows. Các tập cài sẵn theo cáchệ điều hành-Windows. Các tập
tin Windows API DLL có những hàm, thủ tục được tin Windows API DLL có những hàm, thủ tục được
bổ sung một số chức năng mà VB chưa có. bổ sung một số chức năng mà VB chưa có.
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Ngoài các Windows API DLL, các chương Ngoài các Windows API DLL, các chương trình trên Windows có thể phải sử dụng các trình trên Windows có thể phải sử dụng các
DLL khác ( do các công ty hay cá nhân khác DLL khác ( do các công ty hay cá nhân khác
Microsoft phát triển) gọi là cácThird-Party Microsoft phát triển) gọi là cácThird-Party
DLL. Không như cácWindows API DLL , các DLL. Không như cácWindows API DLL , các
Third-Party DLL cần được cài lên đĩa cứng Third-Party DLL cần được cài lên đĩa cứng trước khi sử dụng lần đầu. các Third-Party trước khi sử dụng lần đầu. các Third-Party DLL thường được tạo ra bằng ngôn ngữ C. DLL thường được tạo ra bằng ngôn ngữ C.
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Việc sử dụng cácDLL có nhiều ưu điểm so với các Việc sử dụng cácDLL có nhiều ưu điểm so với các
thư viện tĩnh (thường gọi là Package): thư viện tĩnh (thường gọi là Package):
DLL tiết kiệm chỗ trống trên đĩa.DLL tiết kiệm chỗ trống trên đĩa.
DLL tiết kiệm bộ nhớ bằng cách sử dụng kỹ thuật DLL tiết kiệm bộ nhớ bằng cách sử dụng kỹ thuật
chia sẻ hay còn gọi là ánh xạ bộ nhớ. chia sẻ hay còn gọi là ánh xạ bộ nhớ.
Việc gỡ rối ( Debug) trở nên dễ dàng hơn bởi các Việc gỡ rối ( Debug) trở nên dễ dàng hơn bởi các
lỗi đượccô lập trong DLL duy nhất. lỗi đượccô lập trong DLL duy nhất.
DLL luôn tỏ ra hiệu quả khi độ an toàn của nó DLL luôn tỏ ra hiệu quả khi độ an toàn của nó
được đảm bảo. được đảm bảo.
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
* Khai báo DLL* Khai báo DLL
Để có thể sử dụng các hàm, thủ tục trong một DLL, trước Để có thể sử dụng các hàm, thủ tục trong một DLL, trước
hết phải khai báo các hàm, thủtục đó. Công thức khai báo
hết phải khai báo các hàm, thủtục đó. Công thức khai báo
chung trong VB là:
chung trong VB là:
[Public| Private] Declare Sub|Function name Lib “Libname” [Public| Private] Declare Sub|Function name Lib “Libname”
[Alias “aliasname”]
[Alias “aliasname”]
vd: Public Declare Function PortIn Lib "io.dll" (ByVal Port vd: Public Declare Function PortIn Lib "io.dll" (ByVal Port
As Integer) As Byte
As Integer) As Byte
Trong đóTrong đó
Public : sử dụng toàn cụcPublic : sử dụng toàn cục PortInPortIn: tên hàm: tên hàm
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Port.dll và IO.dllPort.dll và IO.dll
Tệp PORT.DLL là một DLL được viết phục vụ cho việc truy Tệp PORT.DLL là một DLL được viết phục vụ cho việc truy
nhập cổng trong các môi trường Windows. Tệp này bao
nhập cổng trong các môi trường Windows. Tệp này bao
gồm những chức năng sau:
gồm những chức năng sau:
Mở ra các giao diệnMở ra các giao diện Truyền dữ liệu nối tiếpTruyền dữ liệu nối tiếp
Tiếp cận đến các đường dẫn ở giao diệnTiếp cận đến các đường dẫn ở giao diện Nhập vào và xuất ra các cổng.Nhập vào và xuất ra các cổng.
Đo và định thời đến ms, usĐo và định thời đến ms, us
Truy nhập đến card âm thanhTruy nhập đến card âm thanh Truy nhập đến cổng trò chơi.Truy nhập đến cổng trò chơi.
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Tệp PORT.DLL có thể được sử dụng trong Tệp PORT.DLL có thể được sử dụng trong nhiều ngôn ngữ lập trình khác nhau trong nhiều ngôn ngữ lập trình khác nhau trong
nhiều phiên bản khác nhau của hệ điều nhiều phiên bản khác nhau của hệ điều
hành Windows. Đối với các phiên bản hành Windows. Đối với các phiên bản
Windows NT, 2000, XP…các hàm nhập vào Windows NT, 2000, XP…các hàm nhập vào
và xuất ra các cổng của tệp PORT.DLL và xuất ra các cổng của tệp PORT.DLL
không sử dụng được. Vì vậy chúng tôi không sử dụng được. Vì vậy chúng tôi
thường sử dụng thêm một tệp DLL khác có thường sử dụng thêm một tệp DLL khác có
khả năng khắc phục vấn đề trên là IO.DLL. khả năng khắc phục vấn đề trên là IO.DLL.
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Các khai báo của các hàm và thủ tục trong các DLL trên Các khai báo của các hàm và thủ tục trong các DLL trên
được trình bày trong một tập tin có tên “io_port.dll”, người
được trình bày trong một tập tin có tên “io_port.dll”, người
sử dụng có thể “add “ tập tin này vào các ứng dụng của
sử dụng có thể “add “ tập tin này vào các ứng dụng của
mình để sử dụng hoặc chép lại các khai báo dưới đây vào
mình để sử dụng hoặc chép lại các khai báo dưới đây vào
một “Module” mới. Nhưng trước hết để sử dụng các DLL
một “Module” mới. Nhưng trước hết để sử dụng các DLL
này, như đã được đề cập, người dùng phải cài đặt, hay
này, như đã được đề cập, người dùng phải cài đặt, hay
chép 2 tập tin PORT.DLL , IO.DLL vào thư mục hệ thống
chép 2 tập tin PORT.DLL , IO.DLL vào thư mục hệ thống
(…\WINDOWS\System đối với Windows 98 , và
(…\WINDOWS\System đối với Windows 98 , và
…\WINDOWS\System32 đối với Windows XP hay
…\WINDOWS\System32 đối với Windows XP hay
\WINNT\System32 đối với Windows 2000…).
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Một số hàm, thủ tục đáng lưu ý trong Port.dll:Một số hàm, thủ tục đáng lưu ý trong Port.dll:
OPENCOM : mở cổng Com, các cổng Com phải được OPENCOM : mở cổng Com, các cổng Com phải được
mở trước khi sư dụng.
mở trước khi sư dụng.
CLOSECOM: đóng cổng ComCLOSECOM: đóng cổng Com
SENDBYTE: xuất 1 byte dữ liệu ra cổng ComSENDBYTE: xuất 1 byte dữ liệu ra cổng Com READBYTE: nhận 1 byte dữ liệu từ cổng ComREADBYTE: nhận 1 byte dữ liệu từ cổng Com DTR:Set, Reset chân DTR của Cổng ComDTR:Set, Reset chân DTR của Cổng Com
RTS:Set, Reset chân RTS của Cổng ComRTS:Set, Reset chân RTS của Cổng Com
TXD:Set, Reset chân TXD của Cổng ComTXD:Set, Reset chân TXD của Cổng Com CTS:Set, Reset chân CTS của Cổng ComCTS:Set, Reset chân CTS của Cổng Com DSR:Set, Reset chân DSR của Cổng ComDSR:Set, Reset chân DSR của Cổng Com
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
RI: Set, Reset chân RI của Cổng ComRI: Set, Reset chân RI của Cổng Com
DCD: Set, Reset chân DCD của Cổng ComDCD: Set, Reset chân DCD của Cổng Com
DELAY: tạm dừng trong 1 khoảng thời gian tính bằng mili DELAY: tạm dừng trong 1 khoảng thời gian tính bằng mili
giây
giây
DELAYUS:tạm dừng trong 1 khoảng thời gian tính bằng DELAYUS:tạm dừng trong 1 khoảng thời gian tính bằng
micro giây
micro giây
TIMEINIT: bắt đầu đếm thời gian (mili giây)TIMEINIT: bắt đầu đếm thời gian (mili giây)
TIMEREAD: đọc khoảng thời gian đã đếm (mili giây)TIMEREAD: đọc khoảng thời gian đã đếm (mili giây) TIMEINITUS:bắt đầu đếm thời gian (micro giây)TIMEINITUS:bắt đầu đếm thời gian (micro giây)
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
Một số hàm, thủ tục đáng lưu ý trong IO.dllMột số hàm, thủ tục đáng lưu ý trong IO.dll PortOut : xuất 1 byte dữ liệu ra cổngPortOut : xuất 1 byte dữ liệu ra cổng
PortIn: nhập 1 byte dữ liệu từ cổngPortIn: nhập 1 byte dữ liệu từ cổng
PortWordOut: xuất 2 byte dữ liệu ra cổngPortWordOut: xuất 2 byte dữ liệu ra cổng PortWordIn: nhập 2 byte dữ liệu từ cổngPortWordIn: nhập 2 byte dữ liệu từ cổng
PortDWordOut: xuất 4 byte dữ liệu ra cổng, với PortDWordOut: xuất 4 byte dữ liệu ra cổng, với
cổng LPT, lệnh này cho phép xuất dữ cổng LPT, lệnh này cho phép xuất dữ
CHƯƠNG MỞ ĐẦUCHƯƠNG MỞ ĐẦU CHƯƠNG MỞ ĐẦU
PortDWordIn: nhập 4 byte dữ liệu từ cổng,với PortDWordIn: nhập 4 byte dữ liệu từ cổng,với
cổng LPT, lệnh này cho phép nhập dữ cổng LPT, lệnh này cho phép nhập dữ
liệu vào đồng thời từ tất cả các thanh ghi.liệu vào đồng thời từ tất cả các thanh ghi.
SetPortBit : set (mức 1) 1 chân của các cổngSetPortBit : set (mức 1) 1 chân của các cổng ClrPortBit: xoá (mức 0) 1 chân của cổngClrPortBit: xoá (mức 0) 1 chân của cổng
NotPortBit: lấy bù 1 chân của cổngNotPortBit: lấy bù 1 chân của cổng
GetPortBit: nhập về trạng thái của 1 chân nào GetPortBit: nhập về trạng thái của 1 chân nào
đấy. đấy.