封送處理選取的介面
更新:2007 年 11 月
執行階段可呼叫包裝函式 (RCW) 的主要目標是隱藏 Managed 和 Unmanaged 程式撰寫模型 (Programming Model) 之間的差異。為了建立不著痕跡的轉換,RCW 會使用選取的 COM 介面,而不向 .NET 用戶端公開它們,如下圖所示。
COM 介面和執行階段可呼叫包裝函式
在建立做為早期繫結物件時,RCW 是一種特定的型別。它會實作 COM 物件所實作的介面,並且從這個物件的介面公開方法、屬性和事件。在圖例中,RCW 公開 (Expose) INew 介面,但使用 IUnknown 和 IDispatch 介面。此外,RCW 對 .NET 用戶端公開了 INew 介面的所有成員。
RCW 使用了下表所列的介面,這些介面都是由它所包裝的物件公開的。
介面 |
說明 |
---|---|
IDispatch |
用於透過反映晚期繫結 (Late Binding) 至 COM 物件。 |
IErrorInfo |
提供錯誤的文字描述、它的來源、說明檔、說明內容,以及定義這項錯誤的介面 GUID (對 .NET 類別一定是 GUID_NULL)。 |
IProvideClassInfo |
如果被包裝的 COM 物件實作了 IProvideClassInfo,那麼 RCW 將會從這個介面擷取型別資訊,以提供更佳的型別識別 (Identity)。 |
IUnknown |
針對物件識別、型別強制和存留期管理:
|
RCW 可選擇性地使用下表所列的介面,這些介面都是由它所包裝的物件公開的。
介面 |
說明 |
---|---|
IConnectionPoint 和 IConnectionPointContainer |
RCW 會將公開連接點 (Connection Point) 事件樣式的物件轉換為委派 (Delegate) 架構事件。 |
IDispatchEx |
如果類別實作了 IDispatchEx,RCW 便會實作 IExpando。IDispatchEx 介面是 IDispatch 介面的擴充,和 IDispatch 的不同點在於,它啟用成員的列舉型別 (Enumeration)、加入、刪除和區分大小寫呼叫。 |
IEnumVARIANT |
啟用支援被視為集合之列舉型別的 COM 型別。 |