Re[8]: Централизованная обработка исключений
От: Ivan Россия www.rsdn.ru
Дата: 04.10.04 15:16
Оценка:
Здравствуйте, D. Lex, Вы писали:

DL>Здравствуйте, Ivan, Вы писали:


DL>Здесь Вы категорически неправы. Как я хотел бы, чтобы так оно и было! Но увы, в винде UEF не переустанавливает разве что ленивый.


С какой целью ? Я не буду настаивать, что все именно так обстоит на семействе W9X, но на W2K проверял.
Если бы "все кому не лень" устанавливали UnhandledFilter, то первой перестала бы работать CRT, которая на него полагается. Я думаю, все дело в том, что время от времени в процесс загружаются различные модули dll, скомпилированные с различными версиями CRT или слинкованные с ней статически. Каждый раз, когда инициализируется CRT — вызываетя SethUnhandledExceptionFilter.

DL>Возьмите, например, студию, создайте визардом гуевое приложение с несколькими окошками, менюшками, и т.п. На один пункт меню повесьте устанвку Вашего персонального UEF, а на кнопку, скажем — кидание исключения.


На W2003 сделал тестовое приложение — внутри CreateWindow для обычного окна (Win32 Application в 7.1) не вызвался ни разу.
Если бы CreateWindow вызывал SetUnhExFilter — это сломало бы вызов terminate для необработнных C++ исключений. Это слишком очевидный и серьезный баг, чтобы иметь право на существование

DL>Кстати никто же не запрещает вызывать terminate() из Вашего обработчика.

Но это уже выглядит как попытка "немножко" переписать CRT, т.е. выполнять часть ее функций. Гораздо спокойнее не мешать ей выполнять ее функции.

DL>Но нам еще очень долго придется писать код, совместимый с w2k.

Программно можно проверять версию и на новых платформах использовать более простой и надежный код с векторным EH
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.