什麼是 COM - 為什麼 Windows COM 的設計至今依然優雅

· · COM, ActiveX, Windows 開發

什麼是 COM - 為什麼 Windows COM 的設計至今依然優雅

COM 常被認為是老技術,但在 Windows 開發中,它至今仍會作為設計核心反覆出現。
特別是在搜尋中常見的疑問是:COM 是什麼、為什麼需要 IUnknown 和 GUID、以及為什麼到現在仍會被討論。

什麼是 COM?

COM(Component Object Model)是 讓 Windows 上的元件彼此互動的「二進位契約」
它能跨越語言與編譯器差異,透過「介面」這種嚴格契約來通訊。

理解 COM 時,以下元素尤其重要。

  • 以介面為中心的設計(契約先於實作)
  • 透過 GUID(CLSID / IID) 進行識別
  • 透過 IUnknown 進行參考計數與介面探索
  • 不僅能以 DLL(In-Process) 形式運作,也可作為 EXE(Out-of-Process) 運作

簡單說,COM 被設計成「不需要知道實作細節也能重用的機制」。語言中立的介面,這個概念真的非常優雅。

COM 的強項

COM 看似老舊,但在設計上有許多至今仍被高度評價的優勢。

  • 二進位相容性
    已編譯完成的元件,不受語言或執行階段限制即可重用。

  • 介面分離
    隱藏實作、只公開契約,可形成更穩健且可維護的設計。

  • 可共存多版本
    為了在不破壞相容性的前提下擴充功能,基本做法是新增新介面。很有 Microsoft 風格。

  • 可跨行程重用
    透過 Out-of-Process COM,可以安全呼叫其他行程的功能。

這種「獨立於語言、行程與實作」的特性,就是我認為 COM 優雅的地方。

COM 至今仍在第一線

COM 常被貼上「老技術」標籤,但它其實是 至今仍在 Windows 核心中被使用的機制
在與既有資產整合,或使用 Windows 特有功能時,COM 依然是重要選項。

COM 出現的意外場景

  • 檔案總管擴充(右鍵選單與預覽)
  • Office 自動化(外部控制 Excel / Word)
  • 與 .NET 互通(COM Interop)
  • 包含 ActiveX 的既有系統

即使你覺得「現在工作和它無關」,只要做 Windows 開發,COM 幾乎一定會在某處出現。
也正因此,理解 COM 的設計思想非常值得。

共用相同標籤的最新文章。能以相近的主題延伸理解。

ActiveX / OCX 現在如何處理 - 保留・包裝・取代的判斷表

整理在實務專案中遇到 ActiveX 或 OCX 時的判斷流程,從 UI 部件、機器控制、報表、瀏覽器依賴到 32bit 與 64bit 的牆壁,依照保留・包裝・取代三種選項列出對照表與決策流程,並說明註冊發佈與 STA 等容易絆倒的細節,幫讀者選出最低成本的下一步。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽