Author: William Gerbert
OLE Error: CoInitialize has not been called
Answer:
In a project that needed to display HTML documents, I decided to use the
TWebBrowser control. I had used this handy ActiveX control successfully in other
projects before.
This application was an MDI application, written in Delphi 5. As a 'specialty' I
had installed a beta version of Internet Explorer on my system. I am not sure which
of this is responsible for it, but when I would call the function in my application
to display the HTML document, the TWebBrowser element could not be instantiated.
Instead I would receive an error message:
'CoInitialize has not been called'
The surprising thing is that the webbrowser control shows fine in design mode! I
checked and TWebBrowser was properly installed. The underlieing DLL was also
registered properly. A call of
regsvr32 shdocvw.dll
did not help. Finally I manually called the CoInitialize() function. I had to add
OLE2 to the list of used units. A good place to do this is the initialization part
as the sample snippet below shows.
1 uses2 OLE2, // <-- make sure to include this unit3 Windows; // and others4 5 initialization6 CoInitialize(nil); // <-- manually call CoInitialize()7 8 end.