建立一个线程,测试了一下,线程建立成功了。
线程里面: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,好像是内存访问非法,但我不知道是那出错了?
线程里面: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,好像是内存访问非法,但我不知道是那出错了?
解决方案 »
- 小弟菜鸟,麻烦ggjj们多提拔:一个菜单上的右键问题。
- windows服务程序里面如何调用NetQueryDisplayInformation啊?
- debug下编译通不过,release下可以,但是release下运行错误
- 想知道直线的法线方程的系数 A B C的公式
- 关于网络通信中通过SOCKS 5代理中转的问题
- 在串行口通讯方面中的COM1和COM2有什么区别。
- 有一个朋友说要下载VC的(现在没有记得在哪里看到的)我刚找到进入看。
- 申请辞去HTML/XML小版版主
- 怎么我在VC++6.0中的窗口属性中设一些属性好像没用一样???
- 回车换行解惑!!
- 请大家谈谈WTL!
- 怎样在DLL中封装wtl窗口
{
CString str((CHAR*)wParam);
SetDlgItemText(IDC_SHOWDATA,str);
}
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString* pStr = (CString*) wParam;
CEdit* pEdit = (CEdit *) GetDlgItem(IDC_SHOWDATA);
pEdit->SetWindowText(*pStr);
}
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0);不要&,编译通不过。to 3楼:
我把自定义消息注释起来,运行时还是出bug,应该是 ::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0);出问题了!
CProjectSWDlg *pdlg=(CProjectSWDlg*)p; //这句应该是正确的,我看静态类成员函数使用类成员都是这么解决的
怎么检查pdlg->m_hWnd是不是有效,怎么才算有效呢?
CString *pStr = new CString
pStr->Format("xxxxx");
SendMessage(window,msg,(WPARAM),pStr);//Receiver
CString *pStr = (CString*)msg.wparam;//do anything you want....delete pStr;
其次,你要先定位错误位置,加断点这样改试一下:
AfxBeginThread(Manipulator_Move_thread, GetSafeHwnd());
void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
SetDlgItemText(IDC_SHOWDATA, LPCTSTR(wParam));
}
线程里:
HWND h = (HWND)p;
::SendMessage(h,WM_THREAD, (WPARAM)(LPCTSTR)Hand.GetAt(0),0);
void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
SetDlgItemText(IDC_SHOWDATA, LPCTSTR(wParam)); //这一句,编辑框是空白的,说明数据函数没传过去呀
}