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

在專案中新增一個 Form 介面,並定義公靜態方法 InvokeUi() 來建構並顯示視窗:
namespace CSharpUI
{
public class Program
{
public static void InvokeUi()
{
Form1 fm = new Form1();
fm.ShowDialog();
}
}
}
建立 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();
}
建立 Dialog Based 的 C++ 專案 PureC++Pro,靜態連結 MgdPro.dll。在按鈕點擊事件中呼叫包裝方法:
void CPureCProDlg::OnBnClickedButton1()
{
// 呼叫 Managed C++ 觸發 C# UI
MgdClass::InvokeCsharpDlg();
}

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