none
CToolBar::AddReplaceBitmapのDebug Assertion Failed!を解消したい RRS feed

  • 質問

  • VS2010(C++MFC)プロジェクトをVS2019に移行しています。 (OS:Windows10)

    VS2019でビルドは通ってReleaseモードではソフトが起動できるようになったのですが、
    Debugモードでは

    Debug Assertion Failed!

    Program: C:\WINDOWS\SYSTEM32\mfc140ud.dll
    File: d:\agent\_work\1\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\bartool.cpp
    Line: 433
    と出て起動出来ません。 

    Line: 433 は
    CMainFrame::OnCreate から m_wndToolBar->LoadToolBar(IDR_MAINFRAME) を呼んだ先の
    以下というところまで判りました。
    BOOL CToolBar::AddReplaceBitmap(HBITMAP hbmImageWell)
    {
      VERIFY(::GetObject(hbmImageWell, sizeof(BITMAP), &bitmap));  <- Line:433
    }

    ツールバーに使っているBitmapはフルカラー(多分24bit)を使用しています。

    VS2010では問題無かったのですが、 
    VS2019でもフルカラーのBitmapのまま Debug Asserionが出ないにする事は可能でしょうか?

    回避できる方法がありましたらご教授お願いします。

    2020年4月28日 4:46

回答

  • ちょっとソースを見てみました。

    CToolBar クラスのソースに定義されている 下請け関数 AfxLoadSysColorBitmap() が、8bitより大きいビットマップなら nullptr を返すようになったため、その後の AddReplaceBitmap で失敗してしまうようです。

    リリース版でも画像が正しく出ていないのでは?と思いますがどうでしょうか?

    一番手軽なのは、256 色以下の画像に減色して用意するのがいいと思いますがいかがでしょうか?

    ちなみに、VS2010 の AfxLoadSysColorBitmap は、パレットベースではないビットマップでパレットがあるという前提のコードになっていました(たぶん画像の一部がおかしくなってるはず)。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2020年4月28日 7:07

すべての返信

  • ちょっとソースを見てみました。

    CToolBar クラスのソースに定義されている 下請け関数 AfxLoadSysColorBitmap() が、8bitより大きいビットマップなら nullptr を返すようになったため、その後の AddReplaceBitmap で失敗してしまうようです。

    リリース版でも画像が正しく出ていないのでは?と思いますがどうでしょうか?

    一番手軽なのは、256 色以下の画像に減色して用意するのがいいと思いますがいかがでしょうか?

    ちなみに、VS2010 の AfxLoadSysColorBitmap は、パレットベースではないビットマップでパレットがあるという前提のコードになっていました(たぶん画像の一部がおかしくなってるはず)。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2020年4月28日 7:07
  • とっちゃん 様

    ありがとうございました。

    海外のサイトの Q&AページでもAfxLoadSysColorBitmapの事を書いてました。

    16x16サイズのツールバーの画像なのでちょっと位おかしくなっていたかもしれません。(おかしくなっても判らない)

    今回ツールで ある程度綺麗に8Bitに出来るものが見つかったのでそれを使おうと思います。

    2020年4月28日 8:17