15 мая 2013 г.

Использование HTMLHelpViewer в DLL

В модуле HTMLHelpViewer со времени его появления в Delphi 2005 и до выхода Update 4 для Delphi XE2 была ошибка, не позволяющая использовать этот модуль в DLL. Ошибка состоит в том, что в секции finalization всегда выполняется вызов HtmlHelp(HH_CLOSE_ALL), что может приводить к загрузке библиотеки HHCTRL.OCX. Для обычного приложения это не страшно, просто теряется немного времени на загрузку-выгрузку библиотеки. Но если мы пишем DLL (например, COM-объект или плагин для другого приложения), то выполнение секции finalization будет происходить внутри DllMain, и попытка загрузить HHCTRL.OCX приведет либо к зависанию приложения, либо к ошибке Access Violation (в зависимости от версии Windows).