1

コンパイラを 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)));印刷プレビューをクリックすると、タイプが ではありませCGaugeViewCPreviewView

誰かが私のためにこれに光を当てることができますか? ありがとう

4

1 に答える 1

2

型に互換性があることを確認する前に型にキャストすることは無効です。

したがって、次のことを行う必要があります。

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

なぜこの振る舞いが変わったのか、私にはわかりません。たぶん、アサートを無視する前ですか?多分あなたはビルドされたデバッグを試していませんか?

それとも、バージョン 7 で印刷プレビューのアーキテクチャが変更されたのでしょうか? 以前のバージョンでは印刷プレビュー モードがなかっpView->wndGraphicsたため、コード パスがトリガーされなかった可能性があります。

ただし、コードパスを何にも使用していないため、単にダンプするだけです。

于 2013-01-29T17:02:05.877 に答える