首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ 托管擴展 (Managed Extensions for C++) 核心機制與應用場景

     編輯:VC 教學

什麼是托管擴展?

托管擴展是 Microsoft Visual C++ 為 .NET Framework 引入的一組關鍵字與屬性,允許開發者在 C++ 中撰寫受 CLR (Common Language Runtime) 管理的類別 (Managed Class),同時保留原生 C++ 的高效能與靈活性。核心關鍵字:__gc, __value, __interface, __box, __pin 等 (雙底線語法)。

適用場景

  1. 漸進式遷移:大型既有 C++ 程式碼庫,逐模組移植至 .NET,同一應用程式甚至同一檔案混合原生與托管碼。
  2. 原生組件 .NET 化:編寫薄薄的托管包裝器 (Wrapper),暴露原生 C++ 類別/函數供 C#、VB.NET 呼叫。
  3. 從原生碼呼叫 .NET 庫:在傳統 C++ 專案中直接使用 .NET Framework 類別庫 (BCL)、ASP.NET、ADO.NET 等功能。
  4. 混合模式組件:單一 EXE/DLL 同時包含原生與 MSIL 程式碼,編譯器自動處理資料封送與轉換。

核心機制

托管類別 (__gc class)

  • 配置於 CLR 堆疊,由垃圾回收器管理生命週期。
  • 支援單一繼承、多重介面實作、屬性、事件、委派。
  • 可包含原生資料成員 (需 __pin 固定指標)。

原生與托管互操作


// 原生類別
class NativeClass { public: void DoWork(); };

// 托管包裝器
__gc class ManagedWrapper {
    NativeClass* pNative;
public:
    ManagedWrapper() : pNative(new NativeClass) {}
    ~ManagedWrapper() { delete pNative; } // 解構函數釋放原生資源
    void DoWork() { pNative->DoWork(); }  // 轉發呼叫
};

// C# 消費者
// ManagedWrapper mw = new ManagedWrapper();
// mw.DoWork();

資料封送

編譯器自動處理基本類型 (int, double, bool 等)、字串 (System::String ↔ const char*)、陣列、委派等常見類型的雙向轉換。複雜類型需手工編寫封送邏輯。

從托管擴展到 C++/CLI

Visual C++ 2005 引入 C++/CLI (ECMA-372 標準),以更優雅語法 (ref class, value class, interface class, ^, %) 取代雙底線語法。托管擴展仍被支援但標記為過時,**新專案強烈建議直接採用 C++/CLI**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved