我想把我的一个delphi程序写成dll,dll里实现ado连接sql server。但是为什么一加入ado
控件就包错,raised EOleSysError with message '尚未CoInitialize?
哪为高手碰到过这种问题,请帮忙!大侠们!
我的dll
procedure ShowMyForm; stdcall;
    procedure CloseMyForm; stdcall;
implementation
procedure ShowMyForm;
begin
Form1 := TForm1.Create(Application);
    Form1.Show;
Form2 := TForm2.Create(Application);
    Form2.Show;
end;procedure CloseMyForm;
begin
Form1.Close;
    Form2.Close;
end;我的调用程序
procedure ShowMyForm; stdcall;external 'Project1.dll' Name 'ShowMyForm';
procedure CloseMyForm; stdcall;external 'Project1.dll' Name 'CloseMyForm';
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMyForm;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
   CloseMyForm;
end;

解决方案 »

  1.   

    我想你的DLL中已经加入了对ADO的声明,再又在你的应用程序中加ADO的声明,可能会出错吧
      

  2.   

    在调用时要在声明里用到 Activex,再在事件里写
    CoInitialize(nil);
      

  3.   

    在DLL中的工程文件的初始化函数中加入CoInitialize(nil);
    即可。同时注意DLL中窗口的使用,使用窗口时应该把可执行程序的HINSTANCE传个窗体,关闭窗体的时候在赋回来。