由于 dll 過程存在于 visual basic 應(yīng)用程序之外的文件中,在使用時必須指定過程的位置和調(diào)用參數(shù)??梢杂?declare 語句提供這類信息。在聲明了 dll 過程之后,可以把它當(dāng)做 visual basic 自己的過程使用。
重點(diǎn) 如果在 visual basic 中直接調(diào)用 dll,那么 visual basic 環(huán)境下固有的安全機(jī)制將受到不利影響。這意味著在測試和調(diào)試程序時可能會遇到更多的系統(tǒng)故障。為了減少這種危險,在聲明 dll 過程、傳遞參數(shù)和指定類型的時候務(wù)必要小心。無論在什么情況下,一定要經(jīng)常保存已經(jīng)完成的工作。dll 可以提供不同凡響的功能,但是要用好它也不容易。
下例將演示如何調(diào)用 windows api 中的過程。調(diào)用函數(shù) setwindowtext 來改變一個窗體的標(biāo)題欄。當(dāng)然,在實際應(yīng)用中,通??偸抢?visual basic 的 caption 屬性來改變標(biāo)題欄。該示例的目的在于說明如何聲明并調(diào)用過程。
聲明 dll 過程
首先,在模塊的聲明部分對過程進(jìn)行聲明:
private declare function setwindowtext lib “user32″ _
alias “setwindowtexta” (byval hwnd as long, _
byval lpstring as string) as long
過程的精確語法定義可以用 api viewer 應(yīng)用程序找到,在 win32api.txt 文件中也可以找到它。如果將 declare 放在 form 或者 class 模塊內(nèi),那么必須在它的前面加上 private 關(guān)鍵字。同一個 dll 過程在一個工程中只需聲明一次;然后可以任意調(diào)用。
詳細(xì)信息 關(guān)于如何聲明語句,請參閱本章后面的“聲明 dll 過程”主題。
調(diào)用 dll 過程
在聲明了函數(shù)之后,調(diào)用它的方式與標(biāo)準(zhǔn)的 visual basic 函數(shù)相同。在下例中,form load 事件調(diào)用了上面聲明的過程。
private sub form_load()
setwindowtext form1.hwnd, “welcome to vb”
end sub
在運(yùn)行這段代碼時,函數(shù)首先使用 hwnd 屬性確定要修改標(biāo)題欄的窗口(form1.hwnd),然后將標(biāo)題欄修改為“welcome to vb”。
需要牢記的是:visual basic 不能驗證傳遞到 dll 過程的值是否正確。如果傳遞了錯誤的值,那么過程將出錯,并可能因此導(dǎo)致 visual basic 應(yīng)用程序停止運(yùn)行。這樣就不得不重新加載和啟動應(yīng)用程序。在測試 dll 過程時千萬要小心,一定要經(jīng)常地保存自己的工作。
注意 極少數(shù) api 調(diào)用能夠識別缺省的 variant 數(shù)據(jù)類型。最好聲明具體的變量類型并使用 option explicit,這樣,api 的可靠性要高得多。