語法
AddressOf procedurename
必需的 procedurename 指定要傳遞的地址是哪一個過程的地址。這個過程必須是發出調用命令的工程中的一個標準模組模組里的一個過程。
說明
當一個過程的名稱出現在一個參數列表中時,通常該過程已經被計算,並且該過程返回值的地址也會被傳遞。AddressOf 允許該過程的地址被傳遞給動態程式庫 (DLL) 中的一個 Windows API 函式,而不是傳遞該過程的返回值。API 函式然後就可以使用這個地址來調用相應的 Basic 過程,這個過程就是我們所知道的回調。AddressOf 運算符只出現在對 API 過程的調用中。
儘管可以使用 AddressOf 運算符在 Basic 過程之間傳遞過程指針,卻不能通過這樣的一個指針從 Basic 內部調用一個函式。這就是說,例如,一個使用 Basic 編寫的類 不能使用這樣的一個指針來回調自己的控制器。當使用 AddressOf 運算符在 Basic 內的過程之間傳遞一個過程的指針時,被調用過程的參數類型必須定義為 As Long。
警告 如果不能完全理解函式回調的概念,則使用 AddressOf 運算符可能會導致意想不到的結果。必須理解回調的 Basic 部份是如何工作的,以及接受所傳遞的函式地址的 DLL 的代碼是如何工作的。調試這樣的互動操作是非常困難的,因為該程式和開發環境運行在相同的進程中。在某些情況下,系統的調試也許是不可能的。
注意 可以使用 Microsoft Visual C++ (或者類似的工具)編譯的 DLLs 來創建自己的回調函式原型。要使用 AddressOf 運算符來工作,您的原型必需使用 __stdcall 調用約定。預設的調用約定 (__cdecl) 不能與 AddressOf 運算符一起工作。
因為一個回調的調用程式不在用戶自己的程式中,所以很重要的一點是要保證回調過程中的錯誤不被回傳到調用者。可以通過把 On Error Resume Next 語句放置於回調過程的起始處來達到這個要求。