SendMessage 传递 CString

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 );

猜你喜欢

转载自tcspecial.iteye.com/blog/2305854