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