原来用VC6.0那有这些繁琐事情啊,现在用了VC2008开始还是有些不习惯,不过VS2008对C++标准更近了,慢慢熟悉起来就会好的。最多的问题就是在VC6.0中编译通过的代码转换到2008之后报致命错误,不过大部分都能一一修改过来,最近就是碰到了CString 转 const char *的问题。
以前只要简单的一个强制转换就OK了,可现在是不行了,搜索了很多资料,终于搞定,主要是Unicode和ANSI的问题,只要做一个转换就可以了,不过这个过程远没有6.0来的那么轻松。下面这段转换代码也是从MSDN上获取的。
CString str=_T("这是我的测试程序。");
// 先得到要转换为字符的长度
const size_t strsize=(str.GetLength()+1)*2; // 宽字符的长度;
char * pstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,pstr,strsize,str,_TRUNCATE);
int n=atoi(const char*)pstr); // 字符串已经由原来的CString 转换成了 const char*
//没有这番转换会报错,无法将LPCTSTR或CString 转换为const char*
就是每次转换都要写一堆上面的过程了,呵呵。
不过收获还是不少。
我在CChatApp的InitInstance函数调用AfxSocketInit函数以加载套接字库,代码如下:
if (!AfxSocketInit()) { AfxMessageBox(L"加载套接字库失败"); return FALSE; }
然后在CChatDlg的自定义的函数InitSocket里进行创建套接字等操作,代码如下:
m_socket = socket(AF_INET, SOCK_DGRAM, 0); if (INVALID_SOCKET == m_socket) { MessageBox(L"套接字创建失败"); return FALSE; }
其它一些操作都实现后,我调试运行,却提示“套接字创建失败”,
解决方法:
我将AfxSocketInit函数的调用放在了DoModal()的后面了,
使得AfxSocetInit函数没有被执行到,因为m_socketf未被初始化。
代码应该放在DOModa()之前调用
if (!AfxSocketInit()) { AfxMessageBox(L"加载套接字库失败"); return FALSE; }
问题已经解决