vc中关于发送自定义消息传递局部参数的有关问题

vc中关于发送自定义消息传递局部参数的问题
CString strRecv;// 方式1
char szRecv[200] = { 0 };// 方式2
sprintf_s(szRecv, "%s 说:%s", (char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);
strRecv.Format("%s 说:%s",(char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);
::PostMessage(hWnd, WM_RECVMSG, 0, (LPARAM)/*strRecv.GetBuffer()*/szRecv );

以下是自定义函数:
LRESULT CChatDlg::OnRecvData(WPARAM wParam, LPARAM lParam)
{
CString strRecv = (char *)lParam;
CString strData;
GetDlgItemText(IDC_EDIT1, strData);

strData += (strRecv + "\r\n");

SetDlgItemText(IDC_EDIT1, strData);
return 0;
}
当使用方式1打印时是一串乱码:îþîþîþîþîþîþîþîþîþîþîþî
方式2显示正常
照理说应该都不正常才对呀,因为他们都是形参,函数结束就是放了内存,可是为什么使用char数据可以呢,求指教,谢谢啦
------解决思路----------------------
这两种方式都有问题,不能用局部变量。
------解决思路----------------------
PostMessage是逻辑线程异步发给界面线程

而你使用的CString或者char数组都是局部变量,PostMessage后这些局部变量生命周期已过,而PostMessage就是传的局部变量的地址.....

楼主应该new一个堆上的内存

如:
char* pszRecv = new char[200];

memset(pszRecv ,0,200);

sprintf_s(szRecv, "%s 说:%s", (char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);

strRecv.Format("%s 说:%s",(char *)inet_ntoa(addrRecv.sin_addr), (char *)szBuf);

::PostMessage(hWnd, WM_RECVMSG, 0, (LPARAM)pszRecv );

在LRESULT CChatDlg::OnRecvData(WPARAM wParam, LPARAM lParam)函数使用pszRecv 后 delete[] pszRecv ;即可

------解决思路----------------------
char szRecv[200] = { 0 };// 方式2
改成char* szRecv=new char[200];
------解决思路----------------------
很可能是 szRecv 在后面的运行中没有改变地址中的值,所以还可以显示正常