日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用托管C++粘合C#和C++代碼(一)

關(guān)于C#C++孰優(yōu)孰劣的爭論有很多,我不太喜歡這樣的爭論,感覺好像非要置對方于死地而后快。咱們偉大的毛主席說了:百花爭放,百家齊鳴。

改革開放的總設(shè)計(jì)師鄧小平也說了:黑貓白貓,逮住老鼠就是好貓。(呵呵,扯得太遠(yuǎn)了一點(diǎn),憤青們千萬不要砸磚頭。)我想說的是:其實(shí)兩種語言都各有自己的長處,取長補(bǔ)短才是硬道理。C#在xml讀寫,數(shù)據(jù)庫操縱,界面構(gòu)造等很多方面性能卓越;C++的效率高,是底層開發(fā)的必備武器。

當(dāng)然在。NET平臺上C++/CLI的功能也越來越強(qiáng)大,可是畢竟大多數(shù)人對Managed C++不太熟悉,用起來也不是太方便(畢竟摻合的東西太多了),純粹用C++/CLI進(jìn)行開發(fā)還是比較少見的。但是我們在實(shí)際開發(fā)中完全可以通過少量的Managed C++代碼來粘合和包裝C#和C++,真正的工作主體部分由C#和C++各盡其能的去完成,發(fā)揮各自的專長,這樣一來少量的代碼就可以打開任督二脈。

本篇中,首先示例講解如何在C#代碼中調(diào)用純C++模塊中的內(nèi)容。

在本例中,C#界面調(diào)用C++的加法函數(shù),實(shí)現(xiàn)兩個字符串的相加。當(dāng)然,是使用Managed C++為橋梁。實(shí)現(xiàn)步驟如下所示:

首先,建立一個純C++的static library——PureCPPSLib,其中實(shí)現(xiàn)一個字符串相加的類。(步驟省略)

 
 
 
 
  1. class PureCClass
  2. {
  3. public:
  4. PureCClass();
  5. ~PureCClass(void);
  6. public:
  7. LPCTSTR getFirstName();
  8. void setFirstName(LPCTSTR fistName);
  9. LPCTSTR getLastName();
  10. void setLastName(LPCTSTR lastName);
  11. LPCTSTR joinName();
  12. private:
  13. CString m_FirstName;
  14. CString m_LastName;
  15. CString m_fullName;
  16. };
  17. PureCClass::PureCClass()
  18. {}
  19. PureCClass::~PureCClass(void)
  20. {}
  21. LPCTSTR PureCClass::getFirstName()
  22. {
  23. return (LPCTSTR)m_FirstName;
  24. }
  25. void PureCClass::setFirstName(LPCTSTR fistName)
  26. {
  27. m_FirstName = fistName;
  28. }
  29. LPCTSTR PureCClass::getLastName()
  30. {
  31. return (LPCTSTR)m_LastName;
  32. }
  33. void PureCClass::setLastName(LPCTSTR lastName)
  34. {
  35. m_LastName = lastName;
  36. }
  37. LPCTSTR PureCClass::joinName()
  38. {
  39. m_fullName = m_FirstName + _T(" ") +m_LastName;
  40. return (LPCTSTR)(m_fullName);
  41. }

第二步,如下所示建立一個托管的DYNAMIC LINK LIBRARY工程——MgdLib.

托管工程中導(dǎo)入PureCPPSLib的lib文件,include類PureCClass的頭文件,構(gòu)造一個托管類——mgClass,實(shí)現(xiàn)對類PureCClass的托管包裝。該托管類放在namespace MgdLib 中。

 
 
 
 
  1. namespace MgdLib {
  2. public ref class mgClass
  3. {
  4. public:
  5. mgClass();
  6. protected:
  7. !mgClass();
  8. public:
  9. ~mgClass();
  10. property String^ FirstName
  11. {
  12. String ^ get ();
  13. void set (String ^str);
  14. }
  15. property String^ LastName
  16. {
  17. String ^ get ();
  18. void set (String ^str);
  19. }
  20. String^ JoinName();
  21. private:
  22. PureCClass* m_pImpObj;
  23. };
  24. }
  25. namespace MgdLib {
  26. mgClass::mgClass()
  27. {
  28. m_pImpObj = new PureCClass();
  29. }
  30. mgClass::!mgClass()
  31. {
  32. delete m_pImpObj;
  33. }
  34. mgClass::~mgClass()
  35. {
  36. this->!mgClass();
  37. }
  38. String ^ mgClass::FirstName::get()
  39. {
  40. return gcnew String(m_pImpObj->getFirstName());
  41. }
  42. void mgClass::FirstName::set(String^ str)
  43. {
  44. pin_ptr wch = PtrToStringChars(str);
  45. m_pImpObj->setFirstName(((std::wstring)wch).c_str());
  46. }
  47. String ^ mgClass::LastName::get()
  48. {
  49. return gcnew String(m_pImpObj->getLastName());
  50. }
  51. void mgClass::LastName::set(String^ str)
  52. {
  53. pin_ptr wch = PtrToStringChars(str);
  54. m_pImpObj->setLastName(((std::wstring)wch).c_str());
  55. }
  56. String ^ mgClass::JoinName ()
  57. {
  58. return gcnew String(m_pImpObj->joinName());
  59. }
  60. }

然后,建立C#界面工程。C#工程reference引用托管工程生成的MgdLib.dll,并using命名空間MgdLib,就可以實(shí)現(xiàn)對托管包裝類mgClass的調(diào)用了。(為了正確編譯,需要調(diào)整好三個工程之間的依賴關(guān)系)

"Connect" Button 的單擊函數(shù)里添加代碼:

 
 
 
 
  1. private void btnConnect_Click(object sender, EventArgs e)
  2. {
  3. mgClass myC = new mgClass();
  4. myC.FirstName = txtFirstName.Text;
  5. myC.LastName = txtLastName.Text;
  6. String str = myC.JoinName();
  7. txtFullName.Text = str;

最終的運(yùn)行結(jié)果:


新聞名稱:使用托管C++粘合C#和C++代碼(一)
分享地址:http://m.5511xx.com/article/cohohjj.html