Share via


COM 可呼叫包裝函式

當 COM 用戶端呼叫 .NET 物件時,Common Language Runtime 就會建立 Managed 物件和這個物件的 COM 可呼叫包裝函式 (CCW)。 COM 用戶端無法直接參考 .NET 物件,而是使用 CCW 做為 Managed 物件的 Proxy。

Runtime 會對每個 Managed 物件建立一個 CCW,而不管有多少 COM 用戶端要求它的服務。 如下圖所示,多個 COM 用戶端可以擁有公開 INew 介面的這個 CCW 的參考。 而這個 CCW 則保存了實作介面並且已回收記憶體的 Managed 物件單一參考。 COM 和 .NET 用戶端兩者都可以同時對同一個 Managed 物件提出要求。

透過 COM 可呼叫包裝函式存取 .NET 物件

COM 可呼叫包裝函式

對於 .NET Framework 中執行的其他類別而言,COM 可呼叫包裝函式是看不見的。 它們的主要用途是在 Managed 和 Unmanaged 程式碼之間封送處理呼叫;不過,CCW 也會管理它們所包裝之 Managed 物件的物件識別和物件存留期。

物件識別

Runtime 會從它回收的記憶體堆積 (Heap) 中為 .NET 物件配置記憶體,使 Runtime 能夠依需要在記憶體中四處移動物件。 相反地,Runtime 是從非回收的堆積中為 CCW 配置記憶體,使 COM 用戶端可以直接參考包裝函式。

物件存留期

CCW 與它所包裝之 .NET 用戶端的不同之處在於,CCW 是以傳統 COM 的方式進行參考計數。 當 CCW 上的參考計數到達零時,包裝函式便會釋放它對 Managed 物件的參考。 沒有剩餘參考的 Managed 物件,將會在下一個記憶體回收週期中被回收。

請參閱

參考

COM 可呼叫包裝函式

概念

COM 包裝函式

模擬 COM 介面

執行階段可呼叫包裝函式

將 .NET Framework 元件公開給 COM