none
コンボボックスで異常終了 RRS feed

  • 質問

  • Visual Studio 2005 C++

    ATL/WTL

    Windows Vista Business

    で開発しています。

     

    マルチスレッドでいくつかの種類のSDIウィンドウが表示されるようなプログラムを作成しています。

    WTLのウィザードをお使いになったかたはご存知のとおり、SDI,MDIのほかに、マルチスレッドSDIという項目があります。これを少し変形して、さまざまな種類のウィンドウが別スレッドで動くようにしています。

     

    ところがデバッグ中に、特定のウィンドウを終了したときに、期せずして、他のスレッドが終了してアプリケーション全体が終了してしまいます。

    終了コード 3となっており、異常終了であることはわかっていたのですが、原因を追いかけきれずにいました。

    ちなみに、Releaseモードではこの現象は起きません。

     

    ところが、この現象が起きるウィンドウが複数現れてきたので、共通項を探っていくと、どうやらコンボボックスを配置したウィンドウがエラーを起こしていることが分かりました。コンボボックスはコードで生成したものもありますし、ダイアログエディタで書いたものもあります。あるウィンドウのコンボボックスを消してみたら、異常終了しなくなりました。

     

    原因や対処方法、バグであればMSさんの対応を望みます。

    2007年8月14日 0:17

すべての返信

  • 追記です。

     

    コードで生成したコンボボックスの場合、ウィンドウが破棄される前に明示的にコンボボックスのウィンドウを閉じて破棄すると、以上終了はしません。

    ダイアログで生成した場合、明示的に破棄することはできません。

    一般的にダイアログで生成した場合、AttachとかSubclassWindowでそのウィンドウを操作できますが、そうした関数を使わない場合、またAttachをしてDetachが行われているかどうかなども確認しましたが、ダイアログの場合はできないようですね。

    2007年8月23日 1:34