发送消息代码如下:
CString lstr;
CWnd::GetDlgItemTextA(IDC_EDIT1,lstr);
LPCSTR lps;
lps = _T(lstr);
lps = (LPCSTR)lstr;
//lps = "aaa";
::PostMessage(_hNotifyWnd,ON_COM_SENDCOMMOND,(WPARAM)lps,0);接收消息代码如下:
LPCSTR t = (LPCSTR)wParam;
CString lstr;
lstr = t;这样从文本框IDC_EDIT1得到的lstr就会被接收成乱码,发送之前得到的lps都没出现乱码的,使用::PostMessage(_hNotifyWnd,ON_COM_SENDCOMMOND,(WPARAM)&lps,0);时依旧是乱码。但是去掉注释那句 lps = "aaa";后,却能够正确接收到 "aaa"这个字符串。郁闷,求解。

解决方案 »

  1.   

    lps是一个指针;
    lps = "aaa";---〉没有分配内存空间。
      

  2.   

    CString lstr;
    你如果在函数内声明并初始化该变量,离开函数,该变量就会被释放,其指针也会指向被释放的地址。postmessage不会堵塞,投递字符串地址之后就返回了,此时函数结束,指针指向的地址被释放。此时响应此消息的处理是用该指针属于无效调用如果是sendmessage就不会有这样的问题,因为必须等到该消息被处理了才会返回至于lps="aaa";为什么就可以。楼上的已经说得很清楚了
      

  3.   

    多谢楼上两位,我用sendmessage解决问题了。
    代码是
    ::SendMessage(_hNotifyWnd,ON_COM_SENDCOMMOND,(WPARAM)ishex,(LPARAM)&ccm);ccm是我定义的一个传递数据的结构。