Исключение, выброшенное из обработчиков страниц листа свойств - PullRequest
1 голос
/ 27 июня 2011

Я бы хотел поймать и обработать исключение блоком try-catch приложения верхнего уровня, а не внутри обработчиков страниц листа свойств (например, обработчик OnInitDialog). Таким образом, в приведенном ниже коде эти исключения должны обрабатываться в блоке catch (...).

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}

Однако, когда OnInitDialog генерирует исключение, появляется утверждение (в режиме отладки) после запуска деструкторов Windows. Даже если я вызову EndDialog (m_hWnd, IDCANCEL) в деструкторе CMyPropertySheet, утверждение остается. Не могли бы вы помочь определить, что пропало или нет? Я использую WTL. Моя таблица свойств claa является производной от CPropertySheetImpl.

Спасибо.

1 Ответ

0 голосов
/ 28 июня 2011

Вы не можете безопасно передавать исключения через интерфейсы C (например, CreateDialog, DispatchMessage и т. Д.).Вы должны поймать их всех, прежде чем они уйдут из оконной процедуры, каким-то образом передать их вызывающей стороне, а затем отбросить их оттуда.Вы можете сделать это в общем случае в C ++ 0x, но у вас, вероятно, еще нет поддержки.Попробуйте использовать boost::exceptions, чтобы приблизить его в C ++ 03.

...