互通性概觀

互通性可讓您保留並充分利用目前在 Unmanaged 程式碼上的投資。 在 Common Language Runtime (CLR) 控制項底下執行的程式碼是受控程式碼,而在 CLR 外部執行的程式碼則是非受控程式碼。 COM、COM+、C++ 元件、ActiveX 元件及 Microsoft Windows API 都是 Unmanaged 程式碼的範例。

.NET 會透過平台叫用服務、System.Runtime.InteropServices 命名空間、C++ 的互通性及 COM 互通性 (COM Interop),啟用與非受控程式碼的互通性。

平台叫用

平台叫用服務,可讓受控程式碼呼叫在動態連結程式庫 (DLL) 中實作的非受控函式,例如 Microsoft Windows API。 它會找出並叫用匯出的函式,並且在需要的時候於交互操作界限之間封送處理其引數 (整數、 字串、 陣列、 結構和其他) 。

如需詳細資訊,請參閱使用非受控 DLL 函式如何使用平台叫用來播放 WAV 檔案

注意

Common Language Runtime (CLR) 管理對系統資源的存取。 在 CLR 外部呼叫 Unmanaged 程式碼會略過此安全性機制,因而造成安全性風險。 例如,Unmanaged 程式碼可能會直接呼叫 Unmanaged 程式碼中的資源,並略過 CLR 安全性機制。 如需詳細資訊,請參閱 .NET 的安全性

C++ Interop

您可以使用 C++ Interop,也稱為 It Just Works (IJW),來包裝原生 C++ 類別。 C++ Interop 可讓以 C# 或其他 .NET 語言所撰寫的程式碼加以存取。 您可以撰寫 C++ 程式碼來包裝原生 DLL 或 COM 元件。 不同於其他 .NET 語言,Visual C++ 能提供互通性支援,因此可將受控和非受控程式碼放置在相同的應用程式,甚至相同的檔案中。 您接著可使用 /clr 編譯器參數建立 C++ 程式碼,以產生 Managed 組件。 最後,您可以在 C# 專案中新增組件的參考,並使用包裝的物件,就像是使用其他 Managed 類別一樣。

將 COM 元件公開給 C#

您可以從 C# 專案取用 COM 元件。 一般步驟如下所示:

  1. 找出並註冊所要使用的 COM 元件。 使用 regsvr32.exe 註冊或取消註冊 COM DLL。
  2. 將 COM 元件或型別程式庫的參考新增至專案。 只要新增參考,Visual Studio 會使用 Tlbimp.exe (型別程式庫匯入工具),這種檔案可在輸入中使用型別程式庫,藉此輸出 .NET Interop 組件。 此組件 (也稱為執行階段可呼叫包裝函式 (RCW)) 包含 Managed 類別和介面,以包裝型別程式庫中的 COM 類別和介面。 Visual Studio 會將產生的組件參考新增至專案。
  3. 針對在 RCW 中定義的類別建立執行個體。 建立該類別的執行個體時,也會建立 COM 物件的執行個體。
  4. 就像是使用其他 Managed 物件一樣來使用此物件。 當記憶體回收將物件回收時,也會從記憶體釋放 COM 物件的執行個體。

如需詳細資訊,請參閱將 COM 元件公開給 .NET Framework

將 C# 公開給 COM

COM 用戶端可取用已正確公開的 C# 類型。 公開 C# 類型的基本步驟如下所示:

  1. 在 C# 專案中新增 Interop 屬性。 您可以修改 C# 專案屬性來顯示 COM 組件。 如需詳細資訊,請參閱組件資訊對話方塊
  2. 產生 COM 型別程式庫並註冊供 COM 使用。 您可以修改 C# 專案屬性,以自動為 COM Interop 註冊 C# 組件。 Visual Studio 使用 Regasm.exe (組件登錄工具),並使用接受受控組件作為輸入的 /tlb 命令列參數,以產生型別程式庫。 此型別程式庫描述組件中的 public 類型,並新增登錄項目,讓 COM 用戶端可以建立 Managed 類別。

如需詳細資訊,請參閱將 .NET Framework 元件公開給 COM範例 COM 類別

另請參閱