Оба предоставляют механизмы для разматывания стека при возникновении ошибок.
Структурированные исключения предоставляются Windows при поддержке ядра.Они вызываются Windows, если вы делаете такие вещи, как доступ к неверной ячейке памяти.Они также используются для поддержки таких функций, как автоматический рост стека.Они используются довольно редко сами по себе, но языковые исключения в C ++, .NET и подобных языках часто строятся поверх них.Вы используете специальные ключевые слова, такие как __try
и __catch
, чтобы справиться с этими исключениями.Однако работать с ними сравнительно сложно и подвержено ошибкам, потому что вы можете нарушать такие функции, как автоматическое расширение стека, а также потенциально нарушать исключения языка C ++.
Исключения C ++ задаются языком C ++.Типы данных, которые выбрасываются и перехватываются, являются объектами C ++ (включая возможность примитивных типов).Компилятор и среда выполнения реализуют их поверх базового механизма структурированных исключений.Это то, что вы получите, если будете использовать ключевые слова try
, catch
и throw
языка C ++.
Исключения SEH имеют больше возможностей, чем исключения C ++, такие как поддержка возобновления и так называемые "vectored "обработчики (которые получают уведомления об исключениях, но не обязательно предотвращают разматывание стека), но если вы точно не знаете, что хотите их использовать, я бы их избегал.Вероятно, наиболее распространенным из них является написание аварийного дампа с использованием MiniDumpWriteDump , если ваша программа делает что-то недопустимое или неопределенное.