共用方式為


封送處理選取的介面

更新:2007 年 11 月

執行階段可呼叫包裝函式 (RCW) 的主要目標是隱藏 Managed 和 Unmanaged 程式撰寫模型 (Programming Model) 之間的差異。為了建立不著痕跡的轉換,RCW 會使用選取的 COM 介面,而不向 .NET 用戶端公開它們,如下圖所示。

COM 介面和執行階段可呼叫包裝函式

具有介面的 RCW

在建立做為早期繫結物件時,RCW 是一種特定的型別。它會實作 COM 物件所實作的介面,並且從這個物件的介面公開方法、屬性和事件。在圖例中,RCW 公開 (Expose) INew 介面,但使用 IUnknownIDispatch 介面。此外,RCW 對 .NET 用戶端公開了 INew 介面的所有成員。

RCW 使用了下表所列的介面,這些介面都是由它所包裝的物件公開的。

介面

說明

IDispatch

用於透過反映晚期繫結 (Late Binding) 至 COM 物件。

IErrorInfo

提供錯誤的文字描述、它的來源、說明檔、說明內容,以及定義這項錯誤的介面 GUID (對 .NET 類別一定是 GUID_NULL)。

IProvideClassInfo

如果被包裝的 COM 物件實作了 IProvideClassInfo,那麼 RCW 將會從這個介面擷取型別資訊,以提供更佳的型別識別 (Identity)。

IUnknown

針對物件識別、型別強制和存留期管理:

  • 物件識別

    Runtime 會針對每一物件比對 IUnknown 介面的值,來辨別 COM 物件。

  • 型別強制

    RCW 會辨識由 QueryInterface 方法執行的動態型別探索 (Discovery)。

  • 存留期管理

    使用 QueryInterface 方法,RCW 可以取得並持有 Unmanaged 物件的參考,直到執行階段對包裝函式執行釋放這個 Unmanaged 物件的記憶體回收。

RCW 可選擇性地使用下表所列的介面,這些介面都是由它所包裝的物件公開的。

介面

說明

IConnectionPointIConnectionPointContainer

RCW 會將公開連接點 (Connection Point) 事件樣式的物件轉換為委派 (Delegate) 架構事件。

IDispatchEx

如果類別實作了 IDispatchEx,RCW 便會實作 IExpandoIDispatchEx 介面是 IDispatch 介面的擴充,和 IDispatch 的不同點在於,它啟用成員的列舉型別 (Enumeration)、加入、刪除和區分大小寫呼叫。

IEnumVARIANT

啟用支援被視為集合之列舉型別的 COM 型別。

請參閱

概念

執行階段可呼叫包裝函式

限定互通的 .NET 型別

其他資源

組件至型別程式庫轉換的摘要