共用方式為


COM 包裝函式

COM 在下列幾個重要的方面有別於 .NET Framework 物件模型:

  • COM 物件的用戶端必須管理這些物件的存留期 (Lifetime);Common Language Runtime 則會管理在它環境下之物件的存留期。

  • COM 物件的用戶端會藉由要求提供某項服務的介面並且取回介面指標,來判斷這項服務是否可以使用。 .NET 物件的用戶端可以使用反映 (Reflection) 來取得物件功能的描述。

  • .NET 物件是位於由 .NET Framework 執行環境所管理的記憶體中。 基於效能的理由,這個執行環境可以在記憶體中四處移動物件,並且更新它所移動之物件的所有參考。 一旦取得某一物件的指標之後,Unmanaged 用戶端必須依賴這個物件保持在同一位置。 這些用戶端沒有能夠處理位置不固定之物件的機制。

為了克服這些差異,執行階段提供了一些包裝函式類別,可以讓 Managed 和 Unmanaged 用戶端兩者都認為它們是在各自的環境中呼叫物件。 每當 Managed 用戶端呼叫 COM 物件上的方法時,執行階段就會建立執行階段可呼叫包裝函式 (RCW)。 這些 RCW 會抽走 Managed 和 Unmanaged 參考機制之間的差異 (以及一些其他的東西)。 執行階段也會建立 COM 可呼叫包裝函式 (CCW) 來反轉處理序,讓 COM 用戶端能夠不著痕跡地呼叫 .NET 物件上的方法。 如下圖所示,呼叫程式碼的觀點將決定執行階段會建立哪一種包裝函式類別。

COM 包裝函式概觀

COM 包裝函式概觀

在大部分情況下,由 Runtime 產生的標準 RCW 或 CCW,對於在 COM 和 .NET Framework 之間的跨界限呼叫,都能提供適切的封送處理。 使用自訂屬性 (Attribute),您可以選擇性地調整執行階段表示 Managed 和 Unmanaged 程式碼的方式。

請參閱

工作

HOW TO:自訂執行階段可呼叫包裝函式

概念

執行階段可呼叫包裝函式

COM 可呼叫包裝函式

自訂標準包裝函式

其他資源

進階 COM 互通性