L
lzjnuaa
Unregistered / Unconfirmed
GUEST, unregistred user!
关于MDI,DLL,工具栏合并的资源释放问题
我在MDIForm中通过
TshowForm = procedure (post_Application:TApplication;ParentScreen:TScreen;user_id:Integer;ToolButtonParent:TWinControl);stdcall;
调用dll(MDIChild);
在dll中
procedure DLLUnloadProc(ReasonWord);
begin
if Reason=0 then begin
Application:=DllApplication;
Screen:=DllScreen;
end;
end;
procedure showForm(get_Application:TApplication;ParentScreen:TScreen;get_user_id:Integer;get_toolbuttonparent:TWinControl);stdcall;
begin
Application:=get_Application;
Screen:=ParentScreen;
frmAdClientManager:=TfrmAdClientManager.Create(nil);
frmAdClientManager.ToolButtonParent:=get_toolbuttonparent;
frmAdClientManager.FormStyle:=fsMDIChild;
frmAdClientManager.WindowState:=wsMaximized;
end;
exports
showForm;
begin
DllApplication:=Application;
DllScreen:=Screen;
DLLProc:=@DLLUnloadProc;
end.
在frmAdClientManager中动态创建一个AddToolButton,并合并到MDIForm中的工具栏上。
AddToolButton:=TToolButton.Create(self);
AddToolButton.Parent:=self.ToolButtonParent; //AddToolButton的Parent为MDIForm(主控)上的工具栏
AddToolButton.Show;
在该frmAdClientManager的close中 action:=caFree;
现在的问题就是,我在MDIForm中触发一Message来关闭frmAdClientManager,因为frmAdClientManager的close是
action:=caFree;所以把AddToolButton给释放了,按理说在MDIForm上的工具栏中的AddToolButton的指针应该被清除
(因为组件在释放的时候会通知其Parent,并将Parent上的其的指针清除),
但现在问题就是我把MDIChild关闭之后,在MDIForm上的工具栏中该指针还存在,导致报错。
我在MDIForm中通过
TshowForm = procedure (post_Application:TApplication;ParentScreen:TScreen;user_id:Integer;ToolButtonParent:TWinControl);stdcall;
调用dll(MDIChild);
在dll中
procedure DLLUnloadProc(ReasonWord);
begin
if Reason=0 then begin
Application:=DllApplication;
Screen:=DllScreen;
end;
end;
procedure showForm(get_Application:TApplication;ParentScreen:TScreen;get_user_id:Integer;get_toolbuttonparent:TWinControl);stdcall;
begin
Application:=get_Application;
Screen:=ParentScreen;
frmAdClientManager:=TfrmAdClientManager.Create(nil);
frmAdClientManager.ToolButtonParent:=get_toolbuttonparent;
frmAdClientManager.FormStyle:=fsMDIChild;
frmAdClientManager.WindowState:=wsMaximized;
end;
exports
showForm;
begin
DllApplication:=Application;
DllScreen:=Screen;
DLLProc:=@DLLUnloadProc;
end.
在frmAdClientManager中动态创建一个AddToolButton,并合并到MDIForm中的工具栏上。
AddToolButton:=TToolButton.Create(self);
AddToolButton.Parent:=self.ToolButtonParent; //AddToolButton的Parent为MDIForm(主控)上的工具栏
AddToolButton.Show;
在该frmAdClientManager的close中 action:=caFree;
现在的问题就是,我在MDIForm中触发一Message来关闭frmAdClientManager,因为frmAdClientManager的close是
action:=caFree;所以把AddToolButton给释放了,按理说在MDIForm上的工具栏中的AddToolButton的指针应该被清除
(因为组件在释放的时候会通知其Parent,并将Parent上的其的指针清除),
但现在问题就是我把MDIChild关闭之后,在MDIForm上的工具栏中该指针还存在,导致报错。