使用托管C++粘合C#和C++代碼(二)
上篇文章講解了在C#代碼中調(diào)用純C++模塊的基本流程。在本文章中我們再來實現(xiàn)一下C++代碼調(diào)用C#代碼的過程。我構(gòu)造一個簡單并且直觀的例子:通過C++ UI 觸發(fā)C# UI.
首先建立一個C#工程Class Library工程——CSharpUI
為該工程添加一個Form界面,并添加一個C#函數(shù)——InvokeUi()來構(gòu)造并顯示這個界面
- 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#函數(shù)的調(diào)用,并將包裝后的類從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++Pro(exe工程),在工程中靜態(tài)鏈接MgdPro.dll.在Invoke按鈕的觸發(fā)函數(shù)里調(diào)用代碼觸發(fā)C#界面。
- void CPureCProDlg::OnBnClickedButton1()
- {
- // TODO: Add your control notification handler code here
- //call managed c++ to invoke c# UI
- MgdClass::InvokeCsharpDlg();
- }
運行界面如下所示:
【編輯推薦】