互作性可讓您保留並利用對 Unmanaged 程式代碼的現有投資。 在共通語言執行環境(CLR)的控制下執行的程式碼是受控程式碼,而在 CLR 外部執行的程式碼則是非受控程式碼。 COM、COM+、C++元件、ActiveX 元件和 Microsoft Windows API 是 Unmanaged 程式代碼的範例。
.NET 可透過平臺調用服務、System.Runtime.InteropServices 命名空間、C++ 互通性以及 COM 互通性(COM Interop),啟用與非管理代碼的互通性。
平台調用
平台調用 是一項服務,可讓托管程式代碼呼叫動態連結庫(DLL)中實作的非托管函式,例如 Microsoft Windows API。 它會定位並調用已導出的函式,並在需要時將其參數(如整數、字串、陣列、結構等)跨越互操作邊界進行封送處理。
如需詳細資訊,請參閱 取用 Unmanaged DLL 函式 和 如何使用平台呼叫來播放 WAV 檔案。
備註
Common Language Runtime (CLR) 會管理系統資源的存取權。 呼叫 CLR 外部的 Unmanaged 程式代碼會略過此安全性機制,因此會產生安全性風險。 例如,非受管理的程式碼可能會直接呼叫非受管理程式碼中的資源,從而略過 CLR 的安全機制。 如需詳細資訊,請參閱 .NET 中的安全性。
C++ Interop
您可以使用 C++ Interop,也稱為 It Just Works (IJW),包裝原生C++類別。 C++ Interop 可讓以 C# 或其他 .NET 語言撰寫的程式代碼加以存取。 您可以撰寫C++程式代碼來包裝原生 DLL 或 COM 元件。 不同於其他 .NET 語言,Visual C++具有互作性支援,可在相同的應用程式中,甚至是在同一個檔案中啟用 Managed 和 Unmanaged 程式代碼。 接著,您可以使用 /clr 編譯器參數來建置C++程式碼,並產生受管理的組件。 最後,您會在 C# 專案中新增組件的參考,並像使用其他受管理類別一樣使用這些包裝過的物件。
將 COM 元件公開至 C#
您可以從 C# 專案取用 COM 元件。 一般步驟如下所示:
- 找出要使用的 COM 元件並加以註冊。 使用 regsvr32.exe 來註冊或取消註冊 COM DLL。
- 將 COM 元件或類型庫的參考新增到專案。 當您新增參考時,Visual Studio 會使用 Tlbimp.exe(型別庫匯入工具),該工具將型別庫作為輸入,來輸出 .NET 互操作組件。 組件也稱為運行時間可呼叫包裝器(RCW),包含管理的類別和介面,這些類別和介面會包裝類型程式庫中的 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命令列選項,將 Managed 元件作為輸入來產生型別庫。 此類型連結庫描述public組件中的類型,並新增登錄專案,使 COM 用戶端可以建立受管理的類別。
如需詳細資訊,請參閱 將 .NET Framework 元件公開至 COM 和 範例 COM 類別。