dynamic_cast在做downcast的时候出了问题.

dot99 dot99 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题:
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++的问题?
...全文

相关推荐

评论 57
收藏 已收藏
分享
返回顶部
dot99
非技术区 15,445 成员 58,111 内容