我在一个主程序里调用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;
解决方案 »
- 请问如何判断EXCEL工作表中是否有内容及清除功能?
- 新新手的一个比较傻的问题,大哥们不要笑话!
- Delphi中有没有和C++中的new和delete一样的函数?
- 急问:StringGrid控件怎样实现类似于文件管理器中详细资料查看那样?(在线等待)
- 关于循环问题
- 不是MDI窗体,能否将主、子窗体合并?
- 编译成DLL时出错,
- 求助~~在线等待
- 用mediaplayer播放mid时程序会卡一会儿,怎么办?
- :请问高手,我在一个没有窗体的unit中写个生成窗体的过程,其中事件调用本unit中其他过程,但编译不了,为何?谢谢,哪个unit作为主程序调用的,代码已贴出,很容易的问题,帮忙
- 关于远程方法调用的问题(在线等,急急急!)
- 怎样在本机屏幕实时显示局域网中另一台电脑的屏幕内容(急、急、急、急)
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)