互通性概觀
互通性可讓您保留並充分利用目前在 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 元件。 一般步驟如下所示:
- 找出並註冊所要使用的 COM 元件。 使用 regsvr32.exe 註冊或取消註冊 COM DLL。
- 將 COM 元件或型別程式庫的參考新增至專案。 只要新增參考,Visual Studio 會使用 Tlbimp.exe (型別程式庫匯入工具),這種檔案可在輸入中使用型別程式庫,藉此輸出 .NET Interop 組件。 此組件 (也稱為執行階段可呼叫包裝函式 (RCW)) 包含 Managed 類別和介面,以包裝型別程式庫中的 COM 類別和介面。 Visual Studio 會將產生的組件參考新增至專案。
- 針對在 RCW 中定義的類別建立執行個體。 建立該類別的執行個體時,也會建立 COM 物件的執行個體。
- 就像是使用其他 Managed 物件一樣來使用此物件。 當記憶體回收將物件回收時,也會從記憶體釋放 COM 物件的執行個體。
如需詳細資訊,請參閱將 COM 元件公開給 .NET Framework。
將 C# 公開給 COM
COM 用戶端可取用已正確公開的 C# 類型。 公開 C# 類型的基本步驟如下所示:
- 在 C# 專案中新增 Interop 屬性。 您可以修改 C# 專案屬性來顯示 COM 組件。 如需詳細資訊,請參閱組件資訊對話方塊。
- 產生 COM 型別程式庫並註冊供 COM 使用。
您可以修改 C# 專案屬性,以自動為 COM Interop 註冊 C# 組件。 Visual Studio 使用 Regasm.exe (組件登錄工具),並使用接受受控組件作為輸入的
/tlb
命令列參數,以產生型別程式庫。 此型別程式庫描述組件中的public
類型,並新增登錄項目,讓 COM 用戶端可以建立 Managed 類別。
如需詳細資訊,請參閱將 .NET Framework 元件公開給 COM 和範例 COM 類別。