Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки деления на ноль в Windows-приложении на Delphi: как остановить отладчик для анализа плавающей точки в Internet Explorer

Delphi , Интернет и Сети , Компоненты и Интернет

Исправление ошибки деления на ноль в Internet Explorer в Windows-приложении на Delphi

Иногда при работе с встроенным Internet Explorer в приложениях на Delphi может возникать ошибка деления на ноль. Это может происходить при различных действиях, например, при прокрутке документа с помощью клавиши "Page Up" или мыши. Ошибка связана с вызовом функций IOleInPlaceActiveObject::TranslateAccelerator или DispatchMessage, которые используются при обработке сообщений о прокрутке.

Шаги для устранения ошибки:

  1. Использование инструкции FLDCW

В коде Delphi можно использовать инструкцию FLDCW для изменения контрольного слова FPU, что позволяет отключить генерацию исключений при работе с плавающей точкой. Это может быть полезно, если код Internet Explorer написан с учетом того, что исключения FPU не будут генерироваться. Пример кода на Object Pascal:

pascal procedure TfrmControlPanel.FormCreate(Sender: TObject); begin FSaved8087CW := Default8087CW; // Сохраняем текущее контрольное слово FPU Set8087CW($027F); // Отключаем генерацию исключений FPU end;

Важно восстановить исходное контрольное слово после выполнения операций, которые могут вызвать исключения FPU.

  1. Отладка в WinDbg

Если необходимо остановить отладчик Delphi для анализа инструкций, вызывающих исключение, можно использовать отладчик WinDbg. Однако, Delphi перехватывает исключения, что не позволяет WinDbg остановиться на инструкции, вызывающей ошибку. Для получения подробной информации об исключении необходимо отключить перехват исключений в Delphi.

  1. Анализ кода

Поскольку исключение возникает в модуле mshtml.dll, для анализа кода, вызывающего исключение, потребуется обратиться к Microsoft за исходным кодом данного модуля или использовать отладчик для просмотра машинного кода из DLL.

Важные замечания:

  • Использование Math.SetExceptionMask может быть полезным, но следует помнить, что это решение будет работать только на 32-битных системах Windows, если вопрос задается для Delphi 5.
  • При работе с встроенными ActiveX-контролями или внешними DLL всегда стоит учитывать возможность возникновения подобных проблем.

Заключение:

Для устранения ошибки деления на ноль в Internet Explorer в приложении на Delphi рекомендуется отключить перехват исключений FPU с помощью инструкции FLDCW. Это позволит дебаггеру остановиться на инструкции, вызывающей исключение, и проанализировать код. В случае, если исключение возникает в сторонних библиотеках, может потребоваться дополнительный анализ и обращение к поставщику библиотеки за исходным кодом или дополнительной информацией.

Создано по материалам из источника по ссылке.

Исключение деления на ноль в Internet Explorer, встроенном в Windows-приложение на Delphi, требует корректировки обработки ошибок FPU для возможности диагностики проблемы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты и Интернет ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 07:03:41/0.0099170207977295/0