Маскирование исключений с плавающей запятой с помощью Set8087CW, SetMXCSR и TWebBrowser
Как я получаюДеление с плавающей точкой на ноль » Исключение при использовании TWebBrowser и TEmbeddedWB время от времени я обнаружил, что мне нужно замаскировать деление на ноль исключений Set8087CW или SetMXCSR.
Q1: Что было бы лучшим подходом для этого:
маскировать такие исключения на ранних этапах запуска приложения и больше никогда их не трогать (приложение является многопоточным)?использоватьOnBeforeNavigate
а такжеOnDocumentComplete
события для маскировки / снятия маскировки исключений? (есть ли вероятность того, что исключение может произойти после загрузки документа?)Q2: что будет лучше "команда» только замаскироватьделение на ноль" и ничего больше - если приложение 32-битное, есть ли необходимость маскировать 64-битное исключение тоже?
Приложение, которым я пользуюсь, имеет постоянный контроль TWebBrowser для отображения содержимого электронной почты.
Кроме того, если кто-нибудь может уточнить - это конкретная ошибка с управлением TWebBrowser от Microsoft или просто разница между Delphi / C ++ Builder и инструментами Microsoft? Что бы произошло, если бы я разместил TWebBrowser в приложении Visual C ++, если бы появилась ошибка деления на ноль - это нене может быть переведено в исключение, но что будет потом - как будет обрабатываться Visual C ++ "деление на ноль" исключение тогда?
Странно, что Microsoft неЯ не замечаю этой проблемы в течение длительного времени - также странно, что Embarcardero никогда не замечал ее тоже. Поскольку маскирование исключения с плавающей запятой эффективно также маскирует исключение вашей собственной программы для этой конкретной цели.
ОБНОВИТЬ
Мое окончательное решение после некоторого экзамена:
SetExceptionMask(GetExceptionMask() < exZeroDivide);