AddressOf 運算子
一個單項運算符,它將其後面的程序 位址傳遞給 API 程序,該 API 程序在引數 資料表對應位置中需要一個函數指標。
語法
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 陳述式放置於回調程序的起始處來達到這個要求。