gpt4 book ai didi

c++ - 从 VC++ 6 升级到 MSVC 2005 后 MFC 断言失败

转载 作者:行者123 更新时间:2023-11-30 04:21:17 25 4
gpt4 key购买 nike

将编译器从 VC++ 6 升级到 MSVC 2005 后必须更新断言是否正常?我有以下功能,它可以在不触发 Visual Studio 6 中的断言的情况下工作,但更新后的任何功能都会失败。

void CMainFrame::OnUpdateGraphValue (CCmdUI* pCmdUI) {

BOOL bMax;

CMDIChildWnd *child = MDIGetActive (&bMax);
if (child)
{
if (child->IsKindOf (RUNTIME_CLASS (CGaugeChildFrame)))
{
CGaugeView *pView = (CGaugeView *) child->GetActiveView ();
if (pView->wndActive)
{
ASSERT (pView->IsKindOf (RUNTIME_CLASS (CGaugeView)));
pCmdUI->Enable (TRUE);
return;
}
}
if (child->IsKindOf (RUNTIME_CLASS (CGarterChildFrame)))
{
CGarterView *pView = (CGarterView *) child->GetActiveView ();
if (pView->wndGraphics)
{
ASSERT (pView->IsKindOf (RUNTIME_CLASS (CGarterView)));
pCmdUI->Enable (TRUE);
return;
}
}
}

pCmdUI->Enable (FALSE); }

失败发生在 ASSERT (pView->IsKindOf (RUNTIME_CLASS (CGaugeView))); 当我点击打印预览类型不是 CGaugeView 而是 CPreviewView.

有人可以帮我解释一下吗?谢谢

最佳答案

在检查类型是否兼容之前转换为类型是无效的。

所以你需要做:

   if(child->GetActiveView ()->IsKindOf(RUNTIME_CLASS(CGaugeView)))
{
CGaugeView *pView = (CGaugeView *) child->GetActiveView ();

至于为什么这种行为发生了变化,我不知道。也许在您忽略断言之前?也许您没有尝试构建调试?

或者打印预览架构在版本 7 中发生了变化?可能之前版本打印预览模式下没有pView->wndGraphics,所以一直没有触发代码路径。

但是,由于您没有将代码路径用于任何事情,可能只是将其转储。

关于c++ - 从 VC++ 6 升级到 MSVC 2005 后 MFC 断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com