Советы по Delphi

         

в Delphi создаете класс обертки


Проблема: Когда вы в Delphi создаете класс обертки OCX для элемента управления Internet Explorer 3.0 HTML viewer (с именем TExplorer или TWebBrowser, в зависимости от версии вашего браузера), и используете его в приложении Delphi, которое вызывает метод Navigate данного элемента управления OCX, вы можете получить ошибку нарушения доступа (access violation), или даже крах вашей Win95 OLE сессии.

Причина: В обертке Delphi OCX реализован метод IE 3.0 IOleClientSite.GetContainer. Delphi возвращает код ошибки E_NOTIMPL, но IE 3.0 ищет только код ошибки E_NOINTERFACE. IE 3.0 игнорирует все остальные коды ошибок, и продолжает работать с недействительным указателем на интерфейс, это и вызывает ошибку нарушения доступа.

Решение: В модуле Delphi 2.0 OleCtrls.pas, измените метод TOleClientSite.GetContainer так, чтобы возвращаемый функцией результат был E_NOINTERFACE, а не E_NOTIMPL. Примечание: данный способ не решает полностью проблему проверки ошибок IE 3.0, но, по крайней мере, обходит ее.

Важное замечание: Delphi-разработчики и пользователи Delphi C/S могут сделать изменения и не проводить перекомпиляцию, влияющую на другие модули. Пользователи Delphi Desktop не имеют исходных текстов VCL, поэтому для решения проблемы им необходимо получить от Borland обновленные версии соответствующих DCU-файлов. [001968]


Содержание раздела