в 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]
Содержание раздела