C#在xml讀寫,數據庫操縱,界面構造等很多方面性能卓越;C++的效率高,是底層開發的必備武器。當然在。NET平臺上C++/CLI的功能也越來越強大,可是畢竟大多數人對Managed C++不太熟悉,用起來也不是太方便(畢竟摻合的東西太多了),純粹用C++/CLI進行開發還是比較少見的。但是我們在實際開發中完全可以通過少量的Managed C++代碼來粘合和包裝C#和C++,真正的工作主體部分由C#和C++各盡其能的去完成,發揮各自的專長,這樣一來少量的代碼就可以打開任督二脈。
本篇中,首先示例講解如何在C#代碼中調用純C++模塊中的內容。
在本例中,C#界面調用C++的加法函數,實現兩個字符串的相加。當然,是使用Managed C++爲橋樑。實現步驟如下所示:
首先,建立一個純C++的static library——PureCPPSLib,其中實現一個字符串相加的類。(步驟省略)
第二步,如下所示建立一個託管的DYNAMIC LINK LIBRARY工程——MgdLib.
託管工程中導入PureCPPSLib的lib文件,include類PureCClass的頭文件,構造一個託管類——mgClass,實現對類PureCClass的託管包裝。該託管類放在namespace MgdLib 中。
然後,建立C#界面工程。C#工程reference引用託管工程生成的MgdLib.dll,並using命名空間MgdLib,就可以實現對託管包裝類mgClass的調用了。(爲了正確編譯,需要調整好三個工程之間的依賴關係)
"Connect" Button 的單擊函數裏添加代碼:
最終的運行結果:
以上講解了在C#代碼中調用純C++模塊的基本流程。在本文章中我們再來實現一下C++代碼調用C#代碼的過程。我構造一個簡單並且直觀的例子:通過C++ UI 觸發C# UI.
首先建立一個C#工程Class Library工程——CSharpUI
爲該工程添加一個Form界面,並添加一個C#函數——InvokeUi()來構造並顯示這個界面
建立一個託管的DYNAMIC LINK LIBRARY工程——MgdPro。
在MgdPro工程中用代碼包裝了對上述C#函數的調用,並將包裝後的類從DLL導出。前提條件是reference CSharpUI.dll.
最後,新建一個Dialog Based的C++工程——PureC++Pro(exe工程),在工程中靜態鏈接MgdPro.dll.在Invoke按鈕的觸發函數裏調用代碼觸發C#界面。void CPureCProDlg::OnBnClickedButton1()
運行界面如下所示: