我把form封装到dll中,其中在form中使用的是adodataset连的数据库,当我在程序之中调用dll时出现‘尚未调用CoInitialize'错误,不知道怎么调用,或者时dll写的有问题,不知道怎么去解决!请各位兄弟帮忙,尽量附带程序代码!急!!!!

解决方案 »

  1.   

    Ado是COM组件,所以必须在初始化时调用CoInitialize函数,退出时调用CoUninitialize。
      

  2.   

    不知道你在DLL中是怎么创建FORM的,.我是如下做的,可行
    Function FormCreate():integer;
      begin
          Result:=1;
          try
              CoInitialize(nil);
              FrmMain:=TFrmMain.Create(nil);
          except
              Result:=0;
          end;
       end;
    Function FormFree():integer;
      begin
          Result:=1;
          try
              FrmMain.Free;
              CoUninitialize;
          except
              Result:=0;
          end;
      end;
    还有在调用时,你用了ado连接,记得把ActiveX, DB, ADODB,加进去,我想会OK的。我就是这样做的。
      

  3.   

    Dll通常是个“处理厂”,他的任务是来料加工。如果它需要其他的外部资源来协调工作,就会被看成是一个Com组件,进行组件间通讯。所以会出现你看到的错误!
    不知道你程序是怎么写的,但建议你不要把Form和AdoDataset之类的组件放入。我想你的AdoDataset一定会去访问AdoDatabase吧 :)!Dll里尽量只放Function函数!我通常都是这样写的!
      

  4.   

    ???Ado是Com组件吗?我不知道!
      

  5.   

    to  snowfog(秋风舞)你能说的详细一点吗?尽量附带一下代码,因为我时菜鸟,请你把你的代码帮忙写一下好吗?谢谢!
      

  6.   

    内部的链接字符串要用参数传递进来;将代码写成下面这种形式应该就可以了;
    if adoconnection1.connected then
       adoconnection1.connected := false;
    adoconnection1.conncetstring := your_connectstring;
                                       //其中yourconnectstring是你的链接参数
      

  7.   

    uses comobj
    .....
    begin
    initialization
       Coinitialize(nil);
    ......
    finalization
    .....
       CoUninitialize;end.
      

  8.   

    我的dll里有
    adoconnection
    adoquery
    quickreport
    没有用上面的方法,一样没问题。
    应该不是com的事。