Component
3.3.1 Truy cập các hàm API của Windows trong Visual Basic
Chúng ta biết rằng hệ điều hành Windows đợc coi là tập hợp các th viện liên kết động DLL trong đó sẽ có các trình điều khiển và quản lý thiết bị của AXIOM nếu
nó đợc cài đặt, hay nói một cách khác đó chính là các thành phần COM chứa hàng trăm, hàng nghìn hàm chuyên biệt. Các hàm này gọi là các hàm API (Application Programming Interface)-giao diện lập trình ứng dụng. Tuy nhiên việc sử dụng chúng đôi khi gây nên sự lúng túng cho ngời lập trình, vì vậy tìm hiểu những vấn đề cơ bản nhất về cách sử dụng các hàm API trong môi trờng lập trình là công việc hết sức cần thiết. Đây là một trong những kỹ thuật để khai thác và sử dụng các chức năng đã có trong gói phần mềm COM.
Để sử dụng các hàm API của Windows trong môi trờng Visual Basic đòi hỏi kiểu khai báo đặc biệt, phức tạp hơn so với khai báo dùng cho các biến. Các khai báo hàm API đều bắt đầu bằng từ khoá Declare và cần lu ý rằng: hầu hết các hàm API có tham số thì các tham số đó đều tuân theo kiểu tham trị. Visual Basic hỗ trợ hai kiểu cho dạng chung của từ khoá Declare, tuỳ theo từng loại khai báo:
Nếu là thủ tục (tức không trả về một giá trị) cấu trúc khai báo nh sau:
[Public | Private] Declare Sub name Lib "Libname" [Alias_ "aliasname"][(Arglist)]
Nếu là hàm (trả về giá một trị ) cấu trúc khai báo có dạng:
[Public | Private] Declare Function name Lib "Libname" [Alias_ "aliasname"][(Arglist)][As type]
Hầu hết các phần tử trong câu lệnh Declare đã rất quen thuộc với ngời lập trình Visual Basic giống nh khi khai báo một hàm hay một thủ tục. Có một số bộ phận cần lu ý:
Từ khoá "Lib" - báo cho Visual Basic chuẩn bị gọi một hàm trong một DLL. Đối số "Libname" - chỉ ra tên của th viện DLL đó, chứa thủ tục hoặc hàm sẽ đợc gọị
Từ khoá Alias đợc dùng khi muốn đặt tên khác cho thủ tục hoặc hàm, không dùng tên thật có trong DLL. Nó rất tiện lợi, làm cho tên các hàm trở nên thân thiện
hơn với ngời lập trình và đôi khi tránh đợc các xung đột giữa các hàm đợc xây dựng sẵn trong Visual Basic với các hàm APỊ Để minh hoạ, sau đây đa ra một ví dụ khai báo và sử dụng hàm API của Windows trong Visual Basic:
Xem xét lệnh Beep đợc xây dựng sẵn trong Visual Basic: lệnh này chỉ phát ra một tiếng "bíp" có tần số và độ dài âm thanh không thay đổi đợc. Để khắc phục hạn chế này chúng ta có thể dùng hàm Beep của Windows APỊ Phiên bản Beep này cho phép xác lập tần số và độ dài của âm thanh. Do Beep là một từ dành riêng trong môi trờng Visual Basic cho nên bằng từ khoá Alias đặt một tên khác để chỉ hàm Beep
của Windows API, chẳng hạn lấy tên là APIBeep. Câu lệnh Declare cho hàm Beep
của Windows API có dạng:
Public Declare Function APIBeep Lib "kernel32" Alias "Beep" (Byval DwFreq As Long, DwDuration As Long) As Long
Trong đó: DwFreq - cung cấp tần số, còn DwDuration-cung cấp độ dài của âm. Điều đặc biệt quan trọng là câu lệnh Declare đối với các hàm API phải chính xác nh Windows yêu cầụ Chẳng hạn việc loại bỏ từ khoá Byval trong hàm trên có thể dẫn đến làm máy tính ngừng hoạt động. Để tìm đợc các khai báo chính xác của các hàm và các giá trị hằng của những hằng cần dùng cho Windows API có thể dùng chơng trình API Viewer từ Visual Basic bằng cách sử dụng Ađ-In-Manager hoặc từ bộ công cụ của Visual Studio Tools trên menu Start của Windows. Chơng trình API Viewer cho phép xem, tìm kiếm, sao chép và copy thông tin cần thiết về hàm API vào môi trờng soạn thảo chơng trình.
Tuy nhiên để có đợc các khai báo một cách chính xác đối với các thủ tục và hàm trong th viện liên kết động do chúng ta viết hoặc của hãng AXIOM đòi hỏi phải có tài liệu đi kèm hớng dẫn thật tỉ mỉ về cách sử dụng. Về vấn đề này AXIOM đã có phần hớng dẫn rất chu đáo về các hàm của họ trong th viện AXDR32.DLL, cho
phép chúng ta gọi các hàm để làm việc với các card do hãng sản xuất, trong đó có AX5210H.
Có thể nêu ra một thí dụ về khai báo hàm và các tham số của nó trong th viện "AXDR32.DLL" nh sau:
Public Declare Function axInitialize Lib "axDrv32" (ByVal strIniFile As String) As Integer
Đây là một hàm trong th viện AXDR32.DLL của AXIOM dùng để khởi tạo ban đầu cho card. Tham số strInitFile là tên của tệp cấu hình điều khiển và quản lý thiết bị của AXIOM, thờng thì strInitFile= "axdrv.ini".
Một khi đã có các khai báo chính xác các hàm nh ở trên, chúng ta có thể sử dụng các hàm đó trong chơng trình. Ví dụ hàm APIBeep bây giờ có thể đợc sử dụng trong một thủ tục sự kiện nh sau:
Private Sub Beep_Click() Dim Frequency As Long Dim Duration As Long Dim Result As Long
Frequency=1000 ' Đơn vị Hz Duration=1000' Đơn vị ms
Result=APIBeep(Frequency, Duration) End Sub
Mỗi khi kích chuột vào núm "Beep", một âm thanh có tần số 1000Hz sẽ đợc phát ra và kéo dài trong khoảng thời gian 1000ms. Trên đây đã tìm hiểu cách sử dụng các thủ tục và hàm trong th viện liên kết động một công cụ không thể thiếu trong quá trình xây dựng chơng trình.