Topic: Access Violation when using MS Internet Explorer 3.0
WebBrowser as an OCX in Delphi.
Problem: When you create an OCX wrapper class in Delphi to host the
Internet Explorer 3.0 HTML viewer control (named TExplorer or
TWebBrowser depending on the age of your IE installation) and use it
in a Delphi app that calls the Navigate method of that OCX control,
you'll get an access violation as well as possibly ruin your whole
Win95 OLE session.
Reason: IE 3.0 calls the IOleClientSite.GetContainer method of
Delphi's OCX wrapper implementation. Delphi returns an error code
E_NOTIMPL, but IE 3.0 only looks for error code E_NOINTERFACE. IE
3.0 ignores all other error codes and plows ahead with using the
bogus interface pointer, thus the access violation occurs.
Solution: In Delphi 2.0's OleCtrls.pas, modify method
TOleClientSite.GetContainer to return E_NOINTERFACE instead of
E_NOTIMPL as its function result. Note that this doesn't entirely
solve the IE 3.0 error checking problem, but it at least placates it.
Important Note: Delphi Developer and Delphi C/S customers can make
the change and recompile without affecting any other units. Delphi
Desktop customers don't have the VCL source code, so they will need
an updated DCU from Borland in order to fix it.