dynamic_cast在做downcast的时候出了问题.
dot99 2004-06-29 06:14:18 问题:
ChdProcWinDlg *pParent = dynamic_cast<ChdProcWinDlg*>(pwnd->GetParent());
有错吗?
为什么我都得到null
直接强转就ok
ChdProcWinDlg *pParent = (ChdProcWinDlg*)pwnd->GetParent();
(运行期正确)
环境:
这个是在线程里面, 需要使用到窗口类中的方法
pwnd 是通过 DWORD WINAPI ThreadFunc(LPVOID)中传过去的参数用reinterpret_cast转换得到:
CDlgPC * pwnd = reinterpret_cast<CDlgPC*>(lpParam);
CDlgPC是ChdProcWinDlg的子窗口
牢骚:
CWnd => ChdProcWinDlg 是一个 downcast啊~
难道是我对dynamic_cast理解有偏差?
还是GetParent();给我的不是CWnd*
昏了~~
附加:
同样的问题, 出在下面:
(1)
CWnd *pwnd = CWnd::FromHandle(GlobalVar.hwnd_main);
Dlg_Main *pdlg = DYNAMIC_DOWNCAST(Dlg_Main, pwnd);
运行期正确
(环境: 用在dll的函数里面, 需要修改到hwnd_main这个窗口内的一些数据)
(2)
Dlg_Main *pdlg = DYNAMIC_DOWNCAST(Dlg_Main, GetParent());
运行期正确
(环境: 用在Dlg_Main子窗口内)
(3)
ChdProcWinDlg *pParent = DYNAMIC_DOWNCAST(ChdProcWinDlg, pwnd->GetParent());
运行期错误(NULL)
(环境同最上面的一样)
开发工具: VC.NET 2003
ps:不知道该po在哪边, 属于MFC还是C++的问题?