我在DLL文件中写了一个连接数据库函数,但一调用这个函数,就报错“尚未调用coinitialize”.
函数如下:
function connect(km,bm,su,sp:string):boolean; stdcall;
begin
try
 adoc:=Tadoconnection.Create(application);
 adoc.connected:=false;
 adoc.LoginPrompt:=false;
 adoc.ConnectionString:='Provider=SQLOLEDB.1;Password='+#39+sp+#39+
                     ';Persist Security Info=False;User ID='+su +
                     ';Initial Catalog='+ bm +
                     ';Data Source='+km;
 adoc.Connected:=true;
 result:=true;
except
 adoc.Connected:=false;
 result:=false;
end;end;

解决方案 »

  1.   

    编译器不是告诉你了吗。。要调用coinitialize,你在DLL中ADO,要注册。。
      

  2.   

    我不知道怎么注册啊。我不是用了CTEATE了吗
      

  3.   

    给你个例子,你在DLL中使用ADO那么就要注册,注册和create是两码事情。
    下面的例子是一个DLL的导出函数,DLL中使用了ADO组件,
    注意,在最上头,uses activex;
    procedure ShowSbSearch;stdcall
    begin
       CoInitialize(nil);
       dtmd := Tdtmd.Create(nil);
       frmSbSearch := TfrmSbSearch.Create(nil);
       try
         frmSbSearch.ShowModal;
       finally
         frmSbSearch.Free;
         dtmd.Free;
       end;
       CoUninitialize;
    end;exports ShowSbSearch;