1

プロパティ シート ページのハンドラー (たとえば、OnInitDialog ハンドラー) 内ではなく、最上位アプリケーションの try-catch ブロックによって例外をキャッチして処理したいと考えています。したがって、以下のコードでは、これらの例外は catch (...) ブロックで処理されることになっています。

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}

ただし、OnInitDialog が例外をスローすると、Windows デストラクタの実行後に (デバッグ モードで) アサートが表示されます。CMyPropertySheet デストラクタで EndDialog(m_hWnd, IDCANCEL) を呼び出しても、アサートは残ります。不足しているものや間違っているものを検出するのを手伝っていただけますか? WTLを使用しています。私のプロパティ シート claa は、CPropertySheetImpl から派生しています。

ありがとう。

4

1 に答える 1

0

Cインターフェイス(CreateDialog、DispatchMessageなど)を介して例外を安全に渡すことはできません。それらがウィンドウプロシージャから脱出する前にそれらをすべてキャッチし、何らかの方法でそれらを呼び出し元に転送してから、そこからそれらを再スローする必要があります。一般的にC++0xで実行できますが、おそらくまだサポートされていません。boost::exceptionsC++03で近似するために使用してみてください。

于 2011-06-28T09:39:33.273 に答える