VS2005把我弄暈了

今天頭一回在vs2005上寫UDP通訊程序,沒想到遇到這麼多麻煩。那麼多類型轉換出錯:

LPCSTR,wchar,這之類的,把我搞糊塗了,以前沒接觸過這種東西,不瞭解這些該怎麼轉換。

VC6裏面都可以直接換,2005裏卻搞那麼麻煩,真是苦了我這樣的新手.

 

作個記號

 

1.首先是CString轉成char*的問題:

 

在VC6裏面都是

CString str;

char *buf=new char[str.GetLength()+1];

buf=str.GetBuffer(len);

         

這個在vs2005裏就不行,會提示不能將wchar*轉換成char*的。GetBuffer()得到的是wchar*類型.

試了網上的好多方法,錯誤是可以消除,但是好像有信息丟失,輸入的字符和輸出的字符不一樣。

 

經過百般折騰我用下面的方法可以達到我的要求:

 

buf=new char[1024];
 int len=str.GetLength();
 wcstombs(wsabuf.buf,str.GetBuffer(0),len+1); //這個是將wchar_t*換成char*的函數,有對稱的另外的函數mbstowcs

 

2.CString的Format問題

 

當我寫出下面這樣的語句:

CString str;

str.Format("用戶%s發來信息:%s",inet_ntoa(m_addrClient.sin_addr),wsabuf.buf);

 

時,在VC6裏面是完全沒錯誤的。

 

但是在2005裏會報錯,不能將參數1從const char【16】轉成wchar_t*,因爲這裏參數都是要wchar_t*的,雖然可以加_T()或者L等方法消除錯誤,但是一樣結果不對(還沒搞清楚原因)

 

於是我換種方法來搞定它:

 

   char recvbuf[1024];
  sprintf(recvbuf,"用戶%s發來信息:%s",inet_ntoa(m_addrClient.sin_addr),wsabuf.buf);
  CString str(recvbuf);

 

這樣也就達到我要求了。雖然麻煩點,但最後總算完成了。

 

最後纔是最重要的來了,如果你對vs2005的這點很不滿,你想跟以前在VC6上一樣那麼方便,那麼請記好了:

 

剛開始建工程的時候有個選項是“使用Unicode“,把這個前面的勾去掉,那樣就一切正常了。

 

 

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