1. CString作为参数传递
MFC编程中,CString可以直接作为SendMessage()参数来传递。推荐用阻塞方式发送消息,这样能防止CString被析构,而引起内存访问错误。
CString str = _T("hello");
// 发送端
SendMessage( m_pPhoneWnd->GetSafeHwnd(),MY_MSG,(WPARAM)&str,(LPARAM)0 );
// 接收端
CString *str = (String*)wPar;
2. CString转化为char*
VC编程中,经常涉及到多字节和宽字节之间转换,过程比较麻烦。网上大部分都是直接强转:char *p = (LPCSTR)(LPCTSTR)str,经测试不可行。
可通过下列三种方式转化:
CString str = _T("hello世界");
方法一:T2A,A2W
USES_CONVERSION; // 必须调用该宏,才能使用T2A
char *pBuf = T2A( strPassWord.GetBuffer(0) );
方法二:WideCharToMultiByte
A2W宏内部调用就是该API。
char *pstr = newchar[len+1]; // 字节为单位
WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1,pstr,len+ 1 ,NULL,NULL);// 宽字节转化为多字节
pstr[len+1]= '\0';
方法三:wcstombs_s
size_t sz=0;
wcstombs_s( &sz,str,len,str,_TRUNCATE );