模擬 COM 介面
更新:2007 年 11 月
COM 可呼叫包裝函式 (CCW) 會使用與 COM 已執行的介面架構互動一致的方式,向 COM 用戶端公開所有公用 (Public)、COM 可視介面、資料型別和傳回值。對於 COM 用戶端而言,叫用 .NET Framework 物件上的方法和叫用 COM 物件上的方法是一樣的。
為了建立這種緊密整合的方式,CCW 會製作傳統的 COM 介面,例如 IUnknown 和 IDispatch。如下圖所示,CCW 會維持對它所包裝之 .NET 物件的單一參考。COM 用戶端和 .NET 物件兩者都是透過 CCW 的 Proxy 和 Stub 建構彼此互動。
Com 介面和 COM 可呼叫包裝函式
除了公開由 Managed 環境中類別所明確實作的介面外,.NET Framework 還提供下表中所列代表這個物件的 COM 介面實作 (Implementation)。.NET 類別可以藉由提供它自己對這些介面的實作,來覆寫預設的行為。不過,執行階段永遠會提供 IUnknown 和 IDispatch 介面的實作。
介面 |
說明 |
---|---|
Idispatch |
提供晚期繫結至型別的機制。 |
IerrorInfo |
提供錯誤的文字描述、它的來源、說明檔、說明內容,以及定義這項錯誤的介面 GUID (對 .NET 類別一定是 GUID_NULL)。 |
IprovideClassInfo |
讓 COM 用戶端能夠存取由 Managed 類別所實作的 ITypeInfo 介面。 |
IsupportErrorInfo |
讓 COM 用戶端能夠判斷 Managed 物件是否支援 IErrorInfo 介面。如果可以支援,讓用戶端取得最新例外狀況物件的指標。所有 Managed 型別都支援 IErrorInfo 介面。 |
ItypeInfo |
提供與 Tlbexp.exe 所產生之型別資訊完全相同的類別型別資訊。 |
Iunknown |
提供 COM 用戶端用來管理 CCW 的存留期並且提供型別強制的 IUnknown 介面標準實作。 |
Managed 類別也可以提供下表中所描述的 COM 介面。
介面 |
說明 |
---|---|
(_classname) 類別介面 |
由 Runtime 所公開且未明確定義的介面,它會公開所有在 Managed 物件上明確公開的公用介面、方法、屬性和欄位。 |
IConnectionPoint 和 IConnectionPointContainer |
以委派架構事件為來源的物件介面 (註冊事件訂閱者的介面)。 |
IdispatchEx |
如果類別實作 IExpando,則由 Runtime 提供的介面。IDispatchEx 介面是 IDispatch 介面的擴充,和 IDispatch 的不同點在於,它啟用成員的列舉型別 (Enumeration)、加入、刪除和區分大小寫呼叫。 |
IEnumVARIANT |
集合型別類別的介面,如果類別實作 IEnumerable,它會列舉集合中的物件。 |