如果你试图在 DLL 工程内中使用如下代码:
... Self.Conn := TAdoConnection.Create(nil); ...
应用程序就会报错(Project <project-name> raised exception class EoleSysError with message "尚未调用CoInitialize "),同样的代码直接在EXE 工程内调用就不会出现任何问题。
问题的原因是,在 DLL 工程内,我们没有初始化 ActiveX 空间。在 DLL 工程内适当的位置添加如下代码即可解决问题:
uses
ActiveX;
//其它代码
initialization
CoInitialize(nil);
finalization
CoUninitialize;
上述方法可以解决在 DLL 工程内使用 ActiveX 的遇到的此类问题。
补充:如果是在系统服务程序调用com组件,最好要用在调用com组件(如ado)之前调用CoInitialize,在释放时调用CoUninitialize,即可;