Хочется перехватывать и обрабатывать исключения, брошенные из обработчиков страниу (например, OnInitDialog), в блоке try-catch верхнего уровня приложения. В коде ниже показан блок catch, где предполагается обработка исключений.
try {
CMyPropertySheet sheet;
sheet.DoModal();
} catch (...) {
// Здесь должны обрабатываться исключения
}
Однако, если обработчик страницы, например OnInitDialog, бросает исключение, то воникает assert (в debug вурсии) после вызова диструкторов окон. Здесь atl код, где возникает assert:
virtual ~CWindowImplRoot()
{
#ifdef _DEBUG
if(m_hWnd != NULL) // should be cleared in WindowProc
{
ATLTRACE(atlTraceWindowing, 0, _T("ERROR — Object deleted before window was destroyed\n"));
ATLASSERT(FALSE);
}
#endif //_DEBUG
}
Я использую WTL. Класс CMyPropertySheet унаследован от CPropertySheetImpl. Вызов EndDialog(m_hWnd, IDCANCEL) в деструкторе CMyPropertySheet не меняет ситуацию.
Подскажите, пожалуйста, как добиться обработки исключений, брошенных со страниц property sheet на верхнем уровне.