在dll中我封装了2个mdichrild窗体,用下面两个函数输出
procedure ShowDllForm(pMainApp:Pointer;uid:ShortString;UName:ShortString);export; stdcall;
var
  pForm:^TForm;
begin
  Application.Handle:=TApplication(Pointer(pMainApp^)).Handle;
  pForm:[email protected];
  pForm^:= TApplication(Pointer(pMainApp^)).MainForm;
  DM:=TDM.Create(nil);
  DM.UserID:=uid;
  DM.Username:=UName;
  frmUserRole:=TfrmUserRole.Create(nil);
  frmUserRole.FormStyle:=fsMDIChild;
  frmUserRole.WindowState := wsMaximized;
  frmUserRole.Show;
end;procedure ShowDllForm1(pMainApp:Pointer;uid:ShortString;UName:ShortString);export; stdcall;
上同我同时在主调窗口打开后关闭窗口内存就会报错???
请问如何解决  

解决方案 »

  1.   

    在 close 中试一下 Action := caFree
      

  2.   

    DLL MDIfrmOnClose
     Action := caFree;在DLL中加一个Closefrm方法,主程序退出时调用(否则如果不关闭窗体直接退出时会有问题)
      

  3.   

    在Dll窗体中的OnClose里加上Action := caFree; 
    或者改成procedure ShowDllForm(pMainApp:Pointer;uid:ShortString;UName:ShortString);export; stdcall; 
    var 
      pForm:^TForm; 
    begin 
      Application.Handle:=TApplication(Pointer(pMainApp^)).Handle; 
      pForm:[email protected]
      pForm^:= TApplication(Pointer(pMainApp^)).MainForm; 
      DM:=TDM.Create(nil); 
      DM.UserID:=uid; 
      DM.Username:=UName; 
      frmUserRole:=TfrmUserRole.Create(nil); 
      frmUserRole.FormStyle:=fsMDIChild; 
      frmUserRole.WindowState := wsMaximized; 
      frmUserRole.Showmodal; 
      frmUserRole.free;
    end; 
      

  4.   

    错了,只改了模式没改到样式。。procedure ShowDllForm(pMainApp:Pointer;uid:ShortString;UName:ShortString);export; stdcall; 
    var 
      pForm:^TForm; 
    begin 
      Application.Handle:=TApplication(Pointer(pMainApp^)).Handle; 
      pForm:[email protected]
      pForm^:= TApplication(Pointer(pMainApp^)).MainForm; 
      DM:=TDM.Create(nil); 
      DM.UserID:=uid; 
      DM.Username:=UName; 
      frmUserRole:=TfrmUserRole.Create(nil); 
      frmUserRole.FormStyle:=fsNormal; 
      frmUserRole.WindowState := wsMaximized; 
      frmUserRole.Showmodal; 
      frmUserRole.free;
    end;