回調是一種通知約定機制:調用者初始化物件時,傳遞參數與一個可訪問的函數地址。約定事件發生時,被調用者(通常含工作執行緒)按地址調用該函數。雙方處於不同執行緒,實現非同步通訊。
| 機制 | 調用者 | 被調用者 | 特點 |
|---|---|---|---|
| 純回調函數 | 執行緒 A | 執行緒 B | 全域函數形式,跨執行緒通知 |
| Windows 訊息 | 主執行緒 | 主/工作執行緒 | 傳遞 Handle + 訊息號,訊息隊列分發 |
| Delphi VCL 事件模型 | 設計期指定 | 運行期觸發 | 物件方法形式,本質同回調,of object 關鍵字綁定實例 |
Delphi 事件模型本質即回調,差別在於:純回調用全域函數,VCL 事件用物件方法(procedure (pData: Pointer) of object)。
stdcall(Windows 標準調用慣例)。
type
THDFunction = function(I: Integer; s: string): Integer; stdcall;
THDProcedure = procedure(s: string); stdcall;
function HdFunExample(k: Integer; sExam: string): Integer; stdcall;
procedure HdProExample(sExam: string); stdcall;
function HdFunExample(k: Integer; sExam: string): Integer; stdcall;
begin
// 具體業務邏輯
Result := 0;
end;
stdcall 必不可少,否則堆疊平衡錯誤導致崩潰。PChar + 共享記憶體管理器)。Synchronize/Queue/PostMessage)。掌握回調本質與實作細節,能讓 Delphi 開發者游刃有餘地處理異步程式設計、第三方庫整合與系統級程式開發。