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

使用 Managed C++ 串接 C# 與 C++ 代碼(下):C++ 呼叫 C# UI 實作

     編輯:關於C語言

承接上一篇介紹 C# 呼叫純 C++ 模組的基礎流程,本文將示範反向操作:從 C++ 程式碼觸發 C# 建立的使用者介面。我們將透過一個直觀的範例,完整呈現跨語言互操作的實作細節。

架構概覽

整個解決方案包含三個專案:

  1. CSharpUI:C# 類別庫專案,包含 WinForm 介面
  2. MgdPro:Managed C++ 動態連結庫,作為中介層
  3. PureC++Pro:純 C++ 對話框應用程式(EXE),作為啟動端

步驟一:建立 C# UI 類別庫

建立 C# Class Library 專案

在專案中新增一個 Form 介面,並定義公靜態方法 InvokeUi() 來建構並顯示視窗:

namespace CSharpUI
{
    public class Program
    {
        public static void InvokeUi()
        {
            Form1 fm = new Form1();
            fm.ShowDialog();
        }
    }
}

步驟二:建立 Managed C++ 包裝層

建立 Managed Dynamic Link Library 專案 MgdPro(詳細步驟參考上篇),並加入對 CSharpUI.dll 的參考。接著撰寫包裝類別並匯出:

標頭檔

// .h file
#define DLLIMPEXP __declspec(dllexport)

class DLLIMPEXP MgdClass
{
public:
    static void InvokeCsharpDlg();
};

實作檔

// .cpp file
using namespace CSharpUI;

void MgdClass::InvokeCsharpDlg()
{
    Program::InvokeUi();
}

步驟三:純 C++ 專案呼叫包裝層

建立 Dialog Based 的 C++ 專案 PureC++Pro,靜態連結 MgdPro.dll。在按鈕點擊事件中呼叫包裝方法:

void CPureCProDlg::OnBnClickedButton1()
{
    // 呼叫 Managed C++ 觸發 C# UI
    MgdClass::InvokeCsharpDlg();
}

執行結果展示

C++ 觸發 C# UI 執行畫面

關鍵技術要點總結

  • 跨語言互操作:Managed C++ 作為橋樑,讓原生 C++ 能安全呼叫 .NET 組件
  • __declspec(dllexport):將 C++ 類別方法匯出供外部連結
  • using namespace:在 C++/CLI 中引入 C# 命名空間
  • 靜態連結 vs 動態連結:範例採用靜態連結.lib,部署時需確保 DLL 位於執行路徑

此架構模式適用於逐步遷移舊有 C++ 系統至 .NET 平台、整合既有 C++ 演算法庫與 C# 現代化 UI、或建立混合語言的企業級應用系統。

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