VC.Net的託管與非託管混合編程

http://hi.baidu.com/guo_1017/item/67b9ea33a4db5025b2c0c514

VC.Net的託管與非託管混合編程

文章來源:卓銳精品之博 http://blog.elitehome.cn
作者:華瓏

這幾天一直研究VC.Net的託管與非託管混合編程

.Net作爲一個非常優秀的開發平臺,能讓開發人員快速開發界面與應用,但.Net託管代碼是可以很輕易的反編譯,給開發者帶來了很多麻煩。而 VC.Net的非託管代碼可以有效防止反編譯,至少不是那麼容易反編譯。VC.Net的一個非常有用的開發方式,就是託管代碼和非託管代碼的混合開發。


C#作爲一種新型的純託管的開發語言,在使用上,有極其簡單的學習過程,讓學習者能很快掌握與使用。因此,我們的混合編程,可使用C#開發的DLL,在VC.Net中可以方便被引用。

VC.Net中的混合編程,最困難的並不是VC++的語言難懂複雜,而是託管與非託管之間的數據轉換。

目前尋找到一種相對比較簡單可靠的方式:

使用cli::array來做中間體轉換。

cli::array可同時在託管與非託管代碼中使用,並可方便將非託管的char數組類型變成cli::array類型,並通過託管的System::Text::UTF8Encoding轉換成託管的String^類型。
由於非託管的數據類型大都能轉換成char數組,而cli::array類型實際就是託管代碼中的byte[]類型,因此也可以方便轉換成各種託管的數據類型。

具體的例子如下:

  1. String^ ConvertToString(char* inChar, int Len)
  2. {
  3. cli::array<unsigned char>^ cli_array = gcnew cli::array<unsigned char>(Len);
  4. for(int i=0;i < Len;i++)
  5. cli_array[i] = inChar[i];
  6. System::Text::UTF8Encoding ^ encoding=gcnew System::Text::UTF8Encoding();
  7. return encoding->GetString(cli_array);
  8. }
  9. char * ConvertToChar(String^ inString)
  10. {
  11. int Len = _inString->Length;
  12. cli::array<unsigned char>^ cli_array = gcnew cli::array<unsigned char>(Len);
  13. System::Text::UTF8Encoding ^ encoding=gcnew System::Text::UTF8Encoding();
  14. encoding->GetBytes(inString,0,Len,cli_array,0);
  15. char* outChar=new char[Len];
  16. for(int i=0;i<Len;i++)
  17. outChar[i]=cli_array[i];
  18. return outChar
  19. }

在VC.Net中,用nullptr來代替null。

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