Windows 程式設計/COM 和 ActiveX
熟悉 Windows 的人無疑聽說過許多不同的術語,例如 COM、DCOM、COM+、ActiveX、OLE 等。這些到底是什麼,它們之間有什麼關係?
元件物件模型 (COM) 是微軟於 1993 年推出的軟體元件二進位制介面標準。它用於在各種程式語言中啟用程序間通訊和動態物件建立。COM 這個術語在微軟軟體開發行業中通常用作一個總稱,它涵蓋了 OLE、OLE 自動化、ActiveX、COM+ 和 DCOM 技術。COM 本質上為在任何語言中建立的類提供了一個框架,並可以例項化為任何其他語言。一個類可以是用 C++ 編寫的,然後從 VisualBasic、C# 等中呼叫。本質上,COM 定義了所有語言都必須遵循的介面,如果它們想參與 COM 程式。
用可編譯語言 (如 C++ 或 VisualBasic) 編寫的 COM 類可以編譯成 DLL 庫。包含 COM 類的 DLL 庫與用 C 編寫的包含普通 C 函式的 DLL 庫不相容。但是,可以編譯 DLL 檔案,使其既包含標準 C 函式,也包含 COM 類。
包含 COM 類的檔案被稱為 "COM 模組" 或 "COM 元件"。就像其他動態連結應用程式一樣,只要所有模組都正確使用 COM 規範,Windows 將自動管理元件之間的 COM 介面。
COM 系統依賴於被稱為通用唯一識別碼 (UUID) 的數字識別符號。UUID 是一個 128 位數字,基本上保證在整個世界範圍內都是唯一的 COM 識別符號。UUID 數字是一個雜湊值,它基於主網路卡的 MAC 地址 (如果計算機有的話) 和處理器的即時時鐘值。這意味著,生成兩個相同的 UUID 的唯一方法是在同一臺計算機上的完全相同的時間生成這兩個 UUID。謝天謝地,這是不可能做到的。
COM 元件被賦予一個 UUID 號碼,以便它們可以與所有其他 COM 元件區分開來,並且任何給定的 COM 模組都可以透過一個唯一的數字識別符號來識別。