Я пишу небольшую утилиту (VC 2010, без clr), которая выполняет одну простую задачу (растеризация) с использованием сторонней библиотеки. Позже утилита будет использоваться более крупным приложением. Иногда утилита дает сбой из-за повреждения кучи в сторонней библиотеке. Это нормально, но Windows (Vista / 2008) показывает хорошо известный диалог «Программа перестала работать ... Закрыть / Отладить программу». что не подходит в моем случае (на стороне сервера). Утилита должна аварийно завершить работу / прекратить работу без каких-либо видимых эффектов.
Для этого я установил SEH для необработанного исключения (SetUnhandledExceptionFilter). Обработчик отлично вызывается для таких исключений, как AV (* (PDWORD) 0 = 0), но по какой-то причине он не запускается в случае повреждения кучи. Повреждение происходит в dllmain одной из сторонних библиотек dll, пока она выгружается.
Пара вопросов. Кто-нибудь может объяснить, почему обработчик не вызывается? Есть ли другой способ предотвратить этот диалог?