請注意:COM 是一個標準 (Standard,也參照為Binary Standard,定義物件的結構),不是什麼工匠技藝 (craftsmanship) 的產品,也不是程式語言。COM 標準定義一個物件模型 (Object Model),使得 COM 物件(也稱為 COM 元件,或簡稱物件)可以和其他的物件互動工作。物件可以位於執行的行程 (process) 中,或其他行程,甚至是遠端電腦。
COM 是一個標準,因此可以使用多種物件導向語言 (Object-Oriented Language) 撰寫開發,通常是用 C++ 撰寫開發比較容易簡單,原因在於 COM 是 Binary Standard ,C++ 撰寫比較可以控制結構。
軟體中的物件包含資料 (data) 和函式 (function) 兩部分,而 COM 僅有(唯一)利用函式的呼叫操作資料(換句話說,沒有資料這部分),這類函式在 COM 中稱為介面 (interface),而操作COM介面的函式稱為方法 (method) ,注意這些詞彙很容易讓人混淆,COM 的介面不同於C++的,一定要搞清楚!
更進一步來說,COM 要求這些介面必須是用指標 (pointer) 的方式實現(這是技術上關鍵的地方),COM 標準也定義一些元件通用的介面(部分介面必須具備,例如 IUnknown 介面)、元件之間的互動與安全性等。總結,COM 標準是定義介面,而介面實現 (interface implementation) 則由程式設計人員編寫。
COM 標準是微軟 OLE(Object Linking and Embedding) 和 ActiveX 技術的基礎,如果要學習這些技術,我們對 COM 的觀念一定要正確建立,以下是我認為 MSDN 上比較重要的觀念(要多讀幾遍):
- COM Technical Overview
http://msdn.microsoft.com/en-us/library/ff637359(v=VS.85).aspx - Component Object Model (COM)
http://msdn.microsoft.com/en-us/library/ms680573(v=VS.85).aspx - The Component Object Model (COM)
http://msdn.microsoft.com/en-us/library/ms694363(v=VS.85).aspx - Interface Pointers and Interfaces
http://msdn.microsoft.com/en-us/library/ms688484(v=VS.85).aspx - COM Clients and Servers
http://msdn.microsoft.com/en-us/library/ms683835(v=VS.85).aspx - Processes, Threads, and Apartments
http://msdn.microsoft.com/en-us/library/ms693344(v=VS.85).aspx
###