我在一个主程序里调用DLL里面的窗体,当DLL里面的窗体关闭时,要同时关闭主程序里的一个相应的窗体!不知道为什么,当在主程序里运行上面的程序三次以后就会出错?而且是不知名的错误,不知道为什么?当DLL里面的窗体关闭时,同时关闭主程序里的一个相应的窗体,我用的是SENDMESSAG命令,而后改过POSTMESSAGE也会出错?我花了很多时间查问题,很可能出在内存问题上!好象还有资源没释放引起的!比较奇怪的就是第一,二次关闭是正常,可第三次关闭的时候就会出错!面有时候进去时也会出错,提示的大概意思好象是:无效的指针什么的!我急死了!请各位大侠献记献策!程序一部分代码如下:
procedure TFmMainSAD.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited;
try
CloseWindow(p_ParentForm.Handle);
PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
Self :=nil;
Action :=caFree;
except
end;
end;
procedure TFmMainSAD.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited;
try
CloseWindow(p_ParentForm.Handle);
PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
Self :=nil;
Action :=caFree;
except
end;
end;
解决方案 »
- 加图片??
- FastReport和QReport的打印问题
- 50分特急求:怎么判断Edit中的第一个字符是否是英文字母'a'..'z','A'..'Z'?!
- 用Delphi 8写的ASP.NET应用程序能否在Apache web server上运行?散分
- 一個奇怪的錯誤,有誰知道嗎?(重分相謝)
- 愁愁愁!怪怪怪!
- 100分求graburl的代码或实现原理(难倒很多高手的问题)
- 天太热了,请大家来喝点可乐,呵呵
- 关于FIREMONKEY开发IPAD程序的问题
- 哪有 Delphi 5.X ADO_MTS_COM+高级程序设计篇 的光盘源码下啊
- 关于远程方法调用的问题(在线等,急急急!)
- 怎样在本机屏幕实时显示局域网中另一台电脑的屏幕内容(急、急、急、急)
begin
inherited;
try
CloseWindow(p_ParentForm.Handle);
PostMessage(p_ParentForm.Handle,WM_CLOSE,0,0);
Action :=caFree;
Self :=nil;
except
end;
end;
先释放再置成nil
我建议你直接传递p_ParentForm.Handle作为参数,保存到p_ParentFormHandleCloseWindow(p_ParentFormHandle);
Action :=caFree;
Self :=nil;
这两句.
二.DLL句柄是否释放掉?
三.跟踪一下出错出在哪个具体的位置?
不要从主程序传递"窗体"到DLL(p_ParentForm),
而是传递"窗体的句柄"(p_ParentForm.Handle)