API並非只是由Windows提供的.誰也可以提供API函式供VB呼叫.當然你也可以.但大多書籍只介紹了Windows提供的眾多API函式.
可以用另一種邏輯理解VB中呼叫的API函式:
在VB中呼叫由其他語言寫的(也可以包括由VB寫的)函式.這些函式是公開的.
例如你可以使用C來寫一些有用的函式,當你需要在VB中完成同等的功能時,你至少有兩種選擇:
1.用VB語言來改寫C的函式(可謂內部函式),每當某專案需要此功能時就重寫一遍吧;
2.直接呼叫C語言已經寫好的函式(可謂外部函式),與多少專案無關,任何專案都可使用,不必再寫了.
對於第2種情形,就相當於API呼叫了.
API通常被封裝在動態庫(DLL)或者ActiveX控制元件/庫中(也是動態庫).
在VB怎麼呼叫?
在VB中需要呼叫動態庫中的函式時,VB語言有個Declare關鍵字.該關鍵字的作用是對需要呼叫的函式先進行宣告(這個宣告的解釋是:Declare語句告知VB執行庫,呼叫的API的函式名或序號是什麼,這個函式在哪個動態庫中,有什麼引數,返回什麼).
例如:
PrivateDeclareFunctionFlashWindowLib"user32.dll"(ByValhWndAsLong,ByValbInvertAsLong)AsLong
這個例子聲明瞭一個FlashWindow的Windows提供的API函式,它叫FlashWindow,在User32.dll中(user32.dll是Windows自帶的,所以它是Windows提供的API函式),有兩個引數,返回Long值.
至於函式的功能這裡就不詳細介紹了.
聲明後,你就可以像使用自己寫的函式一樣呼叫了:
FlashWindowMe.hWnd,0
所以你最後一個問題:有多少API函式.這個問題是沒有意義的,API函式可以有無限多.
看書籍可以儘快熟悉API的呼叫機制及原理,同時也是對Windows的理解更進一步(因為這些書籍多數是以Windows提供的API為例子的).
除了Declare可以使用其他語言提供的API外,引用ActiveX其實也是API的呼叫,不過習慣上不這麼叫罷了.例如VB人員經常使用的ADO,其實正是使用了ADO動態庫提供的眾多API函式.(ActiveX提供的API使用比需要Declare宣告的更廣更容易.而且它可以在VB的物件瀏覽器中查閱.)
------------------------------------------
再次,API不是Windows獨有的,它可以由任何人提供.所以沒有API大全,最多隻是WindowsAPI大全(新推出的Windows可能會提供更多的新API,或者丟棄一些過時的舊API).這一點不要被誤導.
API並非只是由Windows提供的.誰也可以提供API函式供VB呼叫.當然你也可以.但大多書籍只介紹了Windows提供的眾多API函式.
可以用另一種邏輯理解VB中呼叫的API函式:
在VB中呼叫由其他語言寫的(也可以包括由VB寫的)函式.這些函式是公開的.
例如你可以使用C來寫一些有用的函式,當你需要在VB中完成同等的功能時,你至少有兩種選擇:
1.用VB語言來改寫C的函式(可謂內部函式),每當某專案需要此功能時就重寫一遍吧;
2.直接呼叫C語言已經寫好的函式(可謂外部函式),與多少專案無關,任何專案都可使用,不必再寫了.
對於第2種情形,就相當於API呼叫了.
API通常被封裝在動態庫(DLL)或者ActiveX控制元件/庫中(也是動態庫).
在VB怎麼呼叫?
在VB中需要呼叫動態庫中的函式時,VB語言有個Declare關鍵字.該關鍵字的作用是對需要呼叫的函式先進行宣告(這個宣告的解釋是:Declare語句告知VB執行庫,呼叫的API的函式名或序號是什麼,這個函式在哪個動態庫中,有什麼引數,返回什麼).
例如:
PrivateDeclareFunctionFlashWindowLib"user32.dll"(ByValhWndAsLong,ByValbInvertAsLong)AsLong
這個例子聲明瞭一個FlashWindow的Windows提供的API函式,它叫FlashWindow,在User32.dll中(user32.dll是Windows自帶的,所以它是Windows提供的API函式),有兩個引數,返回Long值.
至於函式的功能這裡就不詳細介紹了.
聲明後,你就可以像使用自己寫的函式一樣呼叫了:
FlashWindowMe.hWnd,0
所以你最後一個問題:有多少API函式.這個問題是沒有意義的,API函式可以有無限多.
看書籍可以儘快熟悉API的呼叫機制及原理,同時也是對Windows的理解更進一步(因為這些書籍多數是以Windows提供的API為例子的).
除了Declare可以使用其他語言提供的API外,引用ActiveX其實也是API的呼叫,不過習慣上不這麼叫罷了.例如VB人員經常使用的ADO,其實正是使用了ADO動態庫提供的眾多API函式.(ActiveX提供的API使用比需要Declare宣告的更廣更容易.而且它可以在VB的物件瀏覽器中查閱.)
------------------------------------------
再次,API不是Windows獨有的,它可以由任何人提供.所以沒有API大全,最多隻是WindowsAPI大全(新推出的Windows可能會提供更多的新API,或者丟棄一些過時的舊API).這一點不要被誤導.