在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;
上同我同时在主调窗口打开后关闭窗口内存就会报错???
请问如何解决
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;
上同我同时在主调窗口打开后关闭窗口内存就会报错???
请问如何解决
Action := caFree;在DLL中加一个Closefrm方法,主程序退出时调用(否则如果不关闭窗体直接退出时会有问题)
或者改成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;
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;