VS2005把我弄晕了

来源:互联网 发布:淘宝一手货源网 编辑:程序博客网 时间:2024/05/17 06:52

今天头一回在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“,把这个前面的勾去掉,那样就一切正常了。