上篇文章講解了在C#代碼中調用純C++模塊的基本流程。在本文章中我們再來實現一下C++代碼調用C#代碼的過程。我構造一個簡單並且直觀的例子:通過C++ UI 觸發C# UI.
首先建立一個C#工程Class Library工程——CSharpUI
為該工程添加一個Form界面,並添加一個C#函數——InvokeUi)來構造並顯示這個界面
- namespace CSharpUI
- {
- public class Program
- {
- public static void InvokeUi()
- {
- //class Form1-----C# UI
- Form1 fm = new Form1();
- fm.ShowDialog();
- }
- }
- }
建立一個托管的DYNAMIC LINK LIBRARY工程——MgdPro具體步驟參考上篇文章)。
在MgdPro工程中用代碼包裝了對上述C#函數的調用,並將包裝後的類從DLL導出。前提條件是reference 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++Proexe工程),在工程中靜態鏈接MgdPro.dll.在Invoke按鈕的觸發函數裡調用代碼觸發C#界面。
- void CPureCProDlg::OnBnClickedButton1()
- {
- // TODO: Add your control notification handler code here
- //call managed c++ to invoke c# UI
- MgdClass::InvokeCsharpDlg();
- }
運行界面如下所示:
編輯推薦】