使用托管C++粘合C#和C++代碼(二)
上篇文章講解了在C#代碼中調(diào)用純C++模塊的基本流程。在本文章中我們再來實(shí)現(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導(dǎo)出。前提條件是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();
 - }
 
運(yùn)行界面如下所示:

【編輯推薦】















 
 
 

 
 
 
 