什麼是 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 的設計思想非常值得。
相關文章
共用相同標籤的最新文章。能以相近的主題延伸理解。
開發 COM 元件、OCX/ActiveX 時常見的坑 - 整理 Visual Studio 的 32bit/64bit、註冊、管理員權限
整理開發 COM、OCX、ActiveX 元件時最容易卡關的四個面向:宿主行程的 32bit/64bit、Visual Studio 2022 變成 64bit 後的設計時整合、regsvr32 與 Regasm 的註冊位置、以及管理員權限與 HKCU/HKLM 的關係,協...
COM / ActiveX / OCX 是什麼 - 差異與關係一次整理
從實務角度釐清 COM、ActiveX、OCX 三者的差異與關係:COM 是 Windows 元件互動的 binary 契約底層,ActiveX 是以 COM 為基礎的可嵌入 control 脈絡,OCX 則為 ActiveX control 常見的副檔名。讀完能分清機制、...
ActiveX / OCX 現在如何處理 - 保留・包裝・取代的判斷表
整理在實務專案中遇到 ActiveX 或 OCX 時的判斷流程,從 UI 部件、機器控制、報表、瀏覽器依賴到 32bit 與 64bit 的牆壁,依照保留・包裝・取代三種選項列出對照表與決策流程,並說明註冊發佈與 STA 等容易絆倒的細節,幫讀者選出最低成本的下一步。
什麼是 Reg-Free COM - 免註冊使用 COM 的機制,以及合用與不合用的情境
整理 Reg-Free COM 的本質、執行時 activation context 與 manifest 的協作方式,以及好處與極限。同時釐清 bitness、相依 DLL、TLB/設計時參考是另一條線,幫助你判斷哪些情境適合導入、哪些情境得另想辦法,並避開常見的部署陷阱。
Excel 報表輸出該怎麼做 - COM 自動化 / Open XML / 範本方式的判斷表
從 Windows 應用與業務系統的角度,把 Excel 報表輸出拆成驅動 Excel 與組裝 Excel 檔案兩條路。整理 COM 自動化、Open XML 直接生成、範本套版、既有 VBA 併用的取捨,並針對使用者編輯、夜間批次、大量輸出等情境,給出不易壞且容易維運的選...
相關主題
與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。
Windows 技術主題
彙整 KomuraSoft LLC 關於 Windows 開發、故障調查與既有資產活用文章的主題中心。
ActiveX 遷移
整理保留、包裝或替換 COM / ActiveX / OCX 資產的階段性判斷的主題頁面。
與本主題相關的服務
本文連結到以下服務頁面,歡迎從最接近的入口查看。
Windows 應用程式開發
支援包含常駐處理、設備連動、運作日誌與可維護結構的 Windows 桌面應用程式。
既有資產活用 & 遷移支援
在持續活用 COM / ActiveX / OCX 資產、原生程式碼與 32 位元相依的同時,協助規劃階段性的遷移。
作者檔案
本文作者的個人檔案頁面。
Go Komura
小村軟體有限公司 代表
以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。