COM 是二進制規範,致力實現可互操作物件。COM 規定物件二進制佈局必須能調用另一 COM 物件服務。只要語言能生成此佈局即可實現 COM 物件。編譯器通常自動生成正確佈局(如 C++ 虛擬函數表)。VB、Java 等非編譯語言在執行期自動掛接 COM。COM 庫提供基本函數(創建物件、查找已註冊類別)。核心目標:讓物件調用其他物件服務;允許新類型物件無縫插入環境。
當應用程式由不受控制的元件構成(如第三方 ActiveX 控制項),元件獨立於應用程式更新。元件實現於獨立可執行檔(DLL/EXE)。需作業系統標準方法激活物件,不想在代碼中使用物理路徑(參數常變化),而使用作業系統維護的標識符。應用程式需對伺服器服務有描述。註冊表作為客戶端與伺服器間解耦層:客戶端用 ProgID/CLSID 激活伺服器,註冊表儲存伺服器物理位置,位置變更時更新註冊表對客戶端透明。DCOM 引入後,本地伺服器甚至可移至遠程機器,客戶端毫無感知。
GUID:128 位結構化整數,全域唯一標識 COM 項目(類別 CLSID、介面 IID)。由工具生成,結合網卡 ID 與系統時間保證時空唯一。儲存於 Windows 註冊表(分級資料庫),追蹤已安裝元件的 CLSID、執行檔路徑、ProgID(程式設計師定義字串名)。類型庫:以二進制、語言無關形式描述介面與方法簽名(.TLB 檔或嵌入執行檔 Win32 資源)。客戶端執行期利用類型庫動態偵測伺服器服務。可用 MIDL 編寫源檔編譯生成,語法類似 CORBA IDL。Java 程式設計師無需使用 MIDL,後文將介紹從 Java 類別生成類型庫的工具。
COM 函數返回預定義 HRESULT 類型(含三欄位整數),支援多重成功/失敗代碼。無法用返回值取回資料,需傳遞指標指向記憶體區域填充資料(稱「外部參數」)。Java/COM 程式設計師無需過度關注,虛擬機自動處理。