用delphi写了个dll,pb调用它时时正常的,可是退出时总报错!经我反复试验发现只要我的dll中的adoconnection有连接,pb退出时就会报错。而且错误在pb执行到“disconnect using sqlca"程序就退出。怀疑是我的ado未释放。可是我都调用了adoconnection.free了啊?困扰几天了。望大家帮帮忙

解决方案 »

  1.   

    代码如下:
    入口:
    uses
      sharemem,
      SysUtils,
      Classes,
      Forms,
      activex,
      Unit1 in 'Unit1.pas' {frmUserMain};{$R *.res}
       procedure UserManage; stdcall;
       begin
        coinitialize(nil);
         frmUserMain := TfrmUserMain.Create(Application) ;
         frmUserMain.Show; 
       end;
       exports
       UserManage;
    begin
    end.唯一的窗口:procedure TfrmUserMain.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
    ADOConnection1.Close;
    adoconnection1.Free;
    adoquery1.Free;
    DataSource1.Free;
    action:=cafree;
    frmusermain:=nil;  end;
    就这些代码。窗口里面被我精简的只剩下一个adoconnection,adoquery,datasouce,和一个grid了。在窗口关闭时写了一下释放代码。
      

  2.   

    重新建个工程,然后把代码重新贴一边可能就没事了Orz 你试试
      

  3.   

    ADOConnection1是动态创建的么?如果不是,不用手工释放。
    另外,对象释放的代码应该放在 窗体的 onDestroy事件中;
      

  4.   

    楼主考虑这样试试看  有些东西释放时有顺序的
    procedure TfrmUserMain.FormClose(Sender: TObject; 
      var Action: TCloseAction); 
    begin 
    DataSource1.Free; 
    adoquery1.Free; 
    ADOConnection1.Close; 
    adoconnection1.Free; 
    action:=cafree; 
    frmusermain:=nil; 
      

  5.   

    别用Free,用FreeAndNil销毁创建的对象。