首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi OLE 自動化服務端創建:進程內/外服務端、實例模式、StartMode、自動化對象專家使用

     編輯:Delphi

8.4.2 創建 OLE 自動化服務端

MemoEdit.dpr 即 OLE 自動化服務端,在 MemoAuto 單元註冊 MemoEdit.Application 自動化類,所有控制器可引用。

兩類服務端

  • 進程內服務端:輸出 OLE 對象的 DLL。對象在控制器同一進程,適合創建共享模塊,多語言程序共用。調用無需控制器調度,避免大量消息句柄處理。
  • 進程外服務端:輸出 OLE 對象的應用程序(EXE)。

Delphi 可創建兩類。

實例模式

模式含義
Internal內部對象,不需註冊,外部進程不可創建
Single每服務端實例僅輸出一個 OLE 對象,多對象需多實例
Multiple一服務端可創建/輸出多個 OLE 對象,進程內服務端多為此類

Automation 對象與 StartMode

使用 OLEAuto 單元的項目自動擁有 Automation 對象(非可視),擁有服務端信息,關鍵為 StartMode 屬性和 OnLastRelease 事件。

StartMode 值含義
smStandAlone用戶啟動應用程序
smAutomationWindows 為創建 OLE 對象啟動程序
smRegServer僅為註冊 OLE 對象啟動
smUnregServer僅為註銷 OLE 對象啟動

StartMode=smAutomation 且用戶不再需要服務端時觸發 OnLastRelease。所有控制器釋放對象後,默認關閉實例,但可在事件中根據 ShutDown 參數決定是否關閉(ShutDown=True 則不關閉)。

定義控制器界面:向上兼容原則

必須定義並註冊 OLE 對象、屬性、方法。修改現有界面時確保向上兼容:不可刪除現有屬性/方法(導致現有控制器報錯),只能增加。

創建服務端步驟

進程內服務端 (DLL)

  1. 創建動態鏈接庫
  2. uses 加入 OLEAuto
  3. 導出四標準入口(大小寫敏感):
    exports
      DLLGetClassObject, DLLCanUnloadNow,
      DLLRegisterServer, DLLUnregisterServer;

進程外服務端 (EXE)

  1. 創建 Delphi 應用程序
  2. 工程文件 begin 後加入:
    if Automation.ServerRegistration then Exit;

添加 OLE 自動化對象(自動化對象專家)

  1. IDE File|New 選 Automation Object,啟動專家
  2. 命名自動化對象(內部標識,習慣 T 開頭,有效 Pascal 標識符)
  3. 命名 OLE 類(外部控制器創建對象用,系統註冊名,CreateOleObject 調用名)
  4. 描述輸出對象
  5. 定義實例模式(進程內常 Multiple,進程外常 Single)
  6. 確定完成

專家產生:① 從 TAutoObject 派生的自動化對象定義(無屬性/方法)② 調用 Delphi OLE 自動化管理器註冊代碼(含全局唯一 ID,與 OLE 類名對應,勿改)。

創建服務端並加入對象後,控制器即可操控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved