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

Delphi COM 程式設計技術詳解:從介面規範到 In-Process 伺服器實作

     編輯:Delphi

COM 核心概念:二進位標準與介面導向

COM(Component Object Model)是二進位介面標準,跨語言、跨編譯器、跨進程、跨機器。核心原則:

  • 介面(Interface):純虛類,語義相關功能群,客戶唯一存取途徑。IUnknown 為所有介面基類,提供 QueryInterface(查詢介面)、AddRef/Release(參考計數)。
  • GUID/CLSID/IID:128 位全域唯一識別碼,分別標識類(CLSID)與介面(IID),避免命名衝突。
  • 參考計數:物件生命週期自動管理。AddRef 增加、Release 減少,歸零時銷毀。Delphi TComObject 自動維護,開發者無需手動呼叫。
  • 虛擬函數表(VTable):編譯器產生的函數指標陣列,實現二進位層級的多型呼叫。同類實例共享 VTable,資料獨立。
  • 介面聚合(Interface Aggregation):COM 無繼承,透過聚合多個介面組合複雜功能。

In-Process COM 伺服器(DLL)建立流程

1. 建立 ActiveX Library 專案:檔案→新建→ActiveX→ActiveX Library。
2. 專案檔匯出四大標準函式:

library MyComServer;
uses ComServ;
exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;
begin
end.

ComServ 單元已實作這四個函式,直接匯出即可。

建立 COM 物件與介面定義

1. 新增 COM Object:檔案→新建→ActiveX→COM Object。向導設定:

  • Class Name:TMyComObject(不須 T 前綴)
  • Instancing:In-Process 無需設定
  • Threading Model:Single/Apartment/Free/Both
  • Implemented Interfaces:輸入介面名(如 IMyInterface)
  • 勾選 Include Type Library 產生 .tlb
  • 勾選 Mark Interface OleAutomation 支援自動化(類型須相容)

2. 產生的單元碼結構:

type
  TMyComObject = class(TTypedComObject, IMyInterface)
  protected
    { 實作 IMyInterface 方法 }
  end;

initialization
  TTypedComObjectFactory.Create(ComServer, TMyComObject, Class_MyComObject,
    ciMultiInstance, tmApartment);
  • 雙重繼承:第一個祖先為 TObject 衍生類(此處 TTypedComObject),第二個為實作介面
  • 介面首欄位為 CLSID,可直接用介面名稱代替常數
  • 類別工廠在 initialization 區建立,DLL 載入即可服務

註冊與部署

命令列註冊: REGSVR32.EXE MyComServer.DLL
手動 .REG 檔註冊:

REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{0AA1740-310E-11D0-A45E-444553540000}]
@="MyCOMServer"
[HKEY_CLASSES_ROOT\CLSID\{0AA1740-310E-11D0-A45E-444553540000}\InProcServer32]
@="C:\\DELPHI\\COMServer\\MyComServer.DLL"

雙擊 .reg 檔匯入登錄檔。註冊後可在登錄編輯器驗證 HKCR\CLSID\{...}\InProcServer32 路徑正確。

進階主題:OLE Automation、ActiveX 控制項、MTS/COM+

  • OLE Automation 物件: 支援 IDispatch 晚期繫結,適合腳本語言,需標記介面 oleautomation
  • ActiveX 控制項: 視覺化、支援事件、屬性頁、持久化,使用專用向導建立
  • MTS/COM+ 整合: Delphi COM 物件可部署於 MTS/COM+,享有交易、物件池化、安全性等企業級服務

Delphi 強大的 ActiveX 架構與 Object Pascal 介面語法,讓 COM 開發從晦澀的 C++ 範本地獄解脫,成為構建 Windows 分散式元件的利器。

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