自定义消息向编辑框发数据,数据显示不出来,该怎么处理

自定义消息向编辑框发数据,数据显示不出来
建立一个线程,测试了一下,线程建立成功了。
线程里面:CProjectSWDlg *pdlg=(CProjectSWDlg*)p;
  ::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0); //发送的是局部变量

自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)  
{
CString *str;
str=(CString*)wParam;
  SetDlgItemText(IDC_SHOWDATA,*str);
}

运行时,出错,单步调试了一下,显示access violation,好像是内存访问非法,但我不知道是那出错了?


------解决方案--------------------
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)Hand.GetAt(0),0); 

自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString str((CHAR*)wParam); 
SetDlgItemText(IDC_SHOWDATA,str);
}


------解决方案--------------------
C/C++ code

自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)   
{
   CString* pStr = (CString*) wParam;
   CEdit* pEdit = (CEdit *) GetDlgItem(IDC_SHOWDATA); 
  pEdit->SetWindowText(*pStr);
 
}

------解决方案--------------------
WPARAM参数必须传堆里的,传栈里的肯定不行.但这样会给回收带来麻烦,甚至无法控制.

最好是先用WM_COPYDATA把WPARAM的值用LPARAM先送过去,然后发送WM_THREAD时,就不需要带参数了,接收方直接使用WM_COPYDATA传过来的值.

------解决方案--------------------
如果::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0);出错的话,那么你应该检查一下pdlg->m_hWnd是不是有效,同时应该保证前面的p的值是正确的。