使用託管C++粘合C#和C++代碼

 

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()

 

 

    運行界面如下所示:

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章