COM(Component Object Model)是二進位介面標準,跨語言、跨編譯器、跨進程、跨機器。核心原則:
IUnknown 為所有介面基類,提供 QueryInterface(查詢介面)、AddRef/Release(參考計數)。AddRef 增加、Release 減少,歸零時銷毀。Delphi TComObject 自動維護,開發者無需手動呼叫。1. 建立 ActiveX Library 專案:檔案→新建→ActiveX→ActiveX Library。
2. 專案檔匯出四大標準函式:
library MyComServer;
uses ComServ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
begin
end.
ComServ 單元已實作這四個函式,直接匯出即可。
1. 新增 COM Object:檔案→新建→ActiveX→COM Object。向導設定:
TMyComObject(不須 T 前綴)Single/Apartment/Free/BothIMyInterface)2. 產生的單元碼結構:
type
TMyComObject = class(TTypedComObject, IMyInterface)
protected
{ 實作 IMyInterface 方法 }
end;
initialization
TTypedComObjectFactory.Create(ComServer, TMyComObject, Class_MyComObject,
ciMultiInstance, tmApartment);
TObject 衍生類(此處 TTypedComObject),第二個為實作介面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 路徑正確。
IDispatch 晚期繫結,適合腳本語言,需標記介面 oleautomationDelphi 強大的 ActiveX 架構與 Object Pascal 介面語法,讓 COM 開發從晦澀的 C++ 範本地獄解脫,成為構建 Windows 分散式元件的利器。