我做的是MDI窗体,每一个自窗体都用一个DLL,窗体里有多个stringgrid,
问题是经常出现程序关闭时内存未释放错误(不敢确定是不是内存未释放)。接着做如下实验,在DLL中FORM的CLOSE事件中加入StringGrid1.free;
StringGrid2.free;
StringGrid3.free;
StringGrid4.free;前几个都正常,运行到StringGrid4.free;时就出现出错提示
“Control has no parent window”我觉的是不是因为这个原因才导致程序退出时出错,非常奇怪的是,为什么一样的控件,就这一个会出现这种问题呢。

解决方案 »

  1.   

    你要将父窗体的程序Application传入,在dll释放的时候再把Application 赋值回去,你肯定是没有赋值回去了
      

  2.   

    这个我已经做了Function GetFormOne(mainzybm:String;mainAdoConn:TADOConnection;app:TApplication;Scr:TScreen):TForm; export; stdcall;
    begin
      adoconn:=mainAdoConn;
      zybm:=mainzybm;
      Application:=app;
      //Screen:=Scr;
      Result:=TKhddllForm.create(Application);
    end;procedure SetOldApplication;stdcall;export;
    begin
      Application:=OldApp;
      //Screen:=OldScreen;
    end;exports
      GetFormOne,SetOldApplication;begin
        OldApp:=Application;
        //OldScreen:=Screen;
    end.
      

  3.   

    你要把父窗体的句柄赋给DLL中的子窗体吧