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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值