API說到底就是一系列的底層函數,是系統(tǒng)提供給用戶用于進入操作系統(tǒng)核心,進行高級編程的途徑。通過在Visual Basic應用程序中聲明外部過程就能夠訪問Windows API(以及其它的外部DLLs)。在聲明了過程之后,調用它的方法與調用Visual Basic自己的過程相同。要聲明一個DLL過程,需要在代碼窗口的"聲明"部分增加一個Declare語句,如果該過程返回一個值,應將其聲明為Function。例如:
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
如果過程沒有返回值,可將其聲明為Sub。缺省情況下,在標準模塊中聲明的DLL過程,可以在應用程序的任何地方調用它。在其他類型的模塊中定義的DLL過程是模塊私有的,必須在它們前面 加上Private關鍵字,以示區(qū)分。特別提請注意的是,在32位的Visual Basic中過程名是區(qū)分大小寫的。而在以前的16位版本中并不區(qū)分大小寫,這是初學者容易出錯的地方。Declare語句中的Lib子句用來告訴Visual Basic如何找到包含該過程的dll文件。如果引用的過程屬于Windows核心庫(User32、Kernel32或 GDI32),則可以不包含文件擴展名。例如:
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount"() As Long。對于其它DLL, Lib子句須指定文件的路徑及擴展名。如果調用的Windows API過程要使用字符串,那么在聲明語句中必須增加一個Alias子句,以指定 正確的字符集。包含字符串的Windows API函數實 際有兩種格武ANSI格式Unicode格式。因此,在 Windows頭文件中,每個包含字符串的函數都同時有ANSI版本和Unicode版本。
例如,下面是SetWindowText函數的兩種C語言描述。
可以看到,第一個描述將函數定義為SetWindowTextA, 尾部的"A"表明它是一個ANSI函數:
SetWindowTextA(HWND hWnd,LPCSTR lpString);
第二個描述將它定義為SetWindowTextW,尾部的 "w"表明它是一個Unicode函數:
SetWindowTextW(HWND Hwnd,LPCWSTR lpString);
因為兩個函數實際的名稱都不是"SetWindow Text",要引用正確的函數就必須增加一個Alias子句:
Private Declare Function SetwindowText Lib "user32" Alias "SetWindowTextA"(ByVal hwnd As Longg,ByVal lpString As String) As Long
請注意, Alias子句后面的字符串必須是過程的真正名稱,必須是區(qū)分大小寫的。事實上,您只需要記住,只有Windows NT才支持Unicode格式,而 Windows 95只支持ANSI格式就行了。至于兩者的區(qū)別,作一般的應用程序開發(fā)是不需要了解的。
VB5專業(yè)版在VB目錄的\Winapi子目錄下,用幾個文件提供了關于API的信息。 Win32api.txt文件中 包含了32位Windows API函數中用到的函數和類型的 結構聲明以及全局常量的值。用戶可以用VB本身帶的外接程序"API瀏覽器"來方便地使用win32api.Txt,如下所示:
點擊菜單文件項的"加載文本文件…"從VB目 錄下的WINAPI目錄中選擇"WIN32API.TXT",就可以 查看WINDOWS 95系統(tǒng)的API函數的聲明、常數定義和 數據類型了。例如,我們打算查看函數InverRect() 的聲明。首先,點擊"搜索"按鈕,輸入字符串 "InverRect"。在"可選項"欄中,蘭色的亮度條將移 動到"InverRect"項上。再點按"添加"按鈕,在"選 定項"中就出現"InverRect"在Visual Basic中的 聲明了。接下來自然是點按"復制"按鈕,然后將窗口切換到Visual Basic開發(fā)環(huán)境中,在需要聲明API 函數的地方Ctrl+V(粘貼)即可。
上面所講的聲明方法雖然簡單,但只有使用WINDOWS本身的API函數才能這樣。對于第三方提供的動態(tài)鏈接庫(DLL)您只有用鍵盤老老實實地敲了。