MemoEdit.dpr 即 OLE 自動化服務端,在 MemoAuto 單元註冊 MemoEdit.Application 自動化類,所有控制器可引用。
Delphi 可創建兩類。
| 模式 | 含義 |
|---|---|
| Internal | 內部對象,不需註冊,外部進程不可創建 |
| Single | 每服務端實例僅輸出一個 OLE 對象,多對象需多實例 |
| Multiple | 一服務端可創建/輸出多個 OLE 對象,進程內服務端多為此類 |
使用 OLEAuto 單元的項目自動擁有 Automation 對象(非可視),擁有服務端信息,關鍵為 StartMode 屬性和 OnLastRelease 事件。
| StartMode 值 | 含義 |
|---|---|
| smStandAlone | 用戶啟動應用程序 |
| smAutomation | Windows 為創建 OLE 對象啟動程序 |
| smRegServer | 僅為註冊 OLE 對象啟動 |
| smUnregServer | 僅為註銷 OLE 對象啟動 |
StartMode=smAutomation 且用戶不再需要服務端時觸發 OnLastRelease。所有控制器釋放對象後,默認關閉實例,但可在事件中根據 ShutDown 參數決定是否關閉(ShutDown=True 則不關閉)。
必須定義並註冊 OLE 對象、屬性、方法。修改現有界面時確保向上兼容:不可刪除現有屬性/方法(導致現有控制器報錯),只能增加。
uses 加入 OLEAutoexports
DLLGetClassObject, DLLCanUnloadNow,
DLLRegisterServer, DLLUnregisterServer;
begin 後加入:
if Automation.ServerRegistration then Exit;
File|New 選 Automation Object,啟動專家T 開頭,有效 Pascal 標識符)CreateOleObject 調用名)Multiple,進程外常 Single)專家產生:① 從 TAutoObject 派生的自動化對象定義(無屬性/方法)② 調用 Delphi OLE 自動化管理器註冊代碼(含全局唯一 ID,與 OLE 類名對應,勿改)。
創建服務端並加入對象後,控制器即可操控。