執行階段可呼叫包裝函式

Common Language Runtime 是透過稱為執行階段可呼叫包裝函式 (RCW) 的 Proxy 來公開 COM 物件。 雖然 RCW 在 .NET 用戶端看來只是個一般的物件,不過它的主要功用是在 .NET 用戶端和 COM 物件之封送處理呼叫。

執行階段會針對每一個 COM 物件恰好建立一個 RCW,而不論這個物件上存在多少參考。 執行階段會針對每一個物件的每一個處理序 (Process) 維持一個 RCW。 如果在某一個應用程式定義域或 Apartment 中建立 RCW,然後將參考傳遞至另一個應用程式定義域或 Apartment,將會使用第一個物件的 Proxy。 如下圖中所示,任何數目的 Managed 用戶端都可以擁有公開 INew 和 INewer 介面之 COM 物件的參考。

透過這個執行階段可呼叫包裝函式存取 COM 物件

RCW

使用由型別程式庫衍生的中繼資料,執行階段可以建立正被呼叫的 COM 物件和這個物件的包裝函式兩者。 每一個 RCW 會在它所包裝的 COM 物件上維持一個介面指標的快取,並於 RCW 已不再需要時,釋放它在 COM 物件上的參考。 執行階段會對 RCW 執行記憶體回收。

在其他的活動方面,RCW 會代表被包裝的物件在 Managed 和 Unmanaged 程式碼之間封送處理資料。 尤其是,只要用戶端和伺服器對於它們之間傳遞的資料有不同的表示方式,RCW 便會提供方法引數和方法傳回值的封送處理。

標準包裝函式會強制執行內建的封送處理規則。 例如,當 .NET 用戶端將 String 型別做為引數的一部分傳遞給 Unmanaged 物件時,包裝函式便會將 String 轉換為 BSTR 型別。 如果 COM 物件傳回 BSTR 給它的 Managed 呼叫端,呼叫端會收到 String。 不論是用戶端還是伺服器,它們所傳送和接收的資料都是它們所熟悉的。 其他型別則不需轉換。 舉例來講,標準包裝函式永遠會在 Managed 和 Unmanaged 程式碼之間傳遞 4 位元組的整數,而不需轉換型別。

請參閱

概念

COM 包裝函式

封送處理選取的介面

COM 可呼叫包裝函式

匯入型別程式庫做為組件

其他資源

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