dll中无模态对话框销毁问题,不解

edisonli 2008-07-28 01:22:40
dll中使用以下代码,报错“内存不能为read”,不知道是不是销毁的方式有问题呢!
void CUpdateDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
DestroyWindow();
CDialog::OnClose();
}
...全文
177 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
edisonli 2008-07-28
  • 打赏
  • 举报
回复
晕,终于知道什么原因了,原来是dll加载后没有释放
cnzdgs 2008-07-28
  • 打赏
  • 举报
回复
“重新打开对话框”是怎么打开?已经delete的对象就不存在了,再使用要重新new。
edisonli 2008-07-28
  • 打赏
  • 举报
回复
啊啊,郁闷啊
要是不加PostQuitMessage的话,可以关闭,但是重新打开对话框就会出错的,
liyinlei 2008-07-28
  • 打赏
  • 举报
回复
对非模式对话框,需要重载OnCancel 和 OnOK 方法,里面只要调用DestroyWindow();
如果想把new出来的dlg类对象在窗口关闭后自动释放掉,则再重载PostNcDestroy函数,调用delete this,也可以不重载这个函数,手动来控制dlg类对象
cnzdgs 2008-07-28
  • 打赏
  • 举报
回复
PostQuitMessage是你打算退出消息循环时才需要的,如果还有其它窗口不想退出,就不要加这行代码了。
edisonli 2008-07-28
  • 打赏
  • 举报
回复
按照cnzdgs的方法,连主程序一起关闭了

LRESULT CUpdateDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
....
case WM_DESTROY:
PostQuitMessage(0);
break;
}

}
void CUpdateDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class

CDialog::PostNcDestroy();
delete this;
}


void CUpdateDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
DestroyWindow();
}
cnzdgs 2008-07-28
  • 打赏
  • 举报
回复
有可能。如果你按照13楼的做法来做,不添加其它代码,是不会有问题的。
edisonli 2008-07-28
  • 打赏
  • 举报
回复
cnzdgs:是不是我重载了WindowProc的原因呢,给出一个代码吧,刚接触vc,有很多东西不理解
cnzdgs 2008-07-28
  • 打赏
  • 举报
回复
DestroyWindow会产生很多消息,看看你是不是响应了其它相关消息或者重载了相关函数。

如果是用new构造的非模态对话框,通常的做法是:
响应WM_CLOSE消息,执行DestroyWindow;重载PostNcDestroy函数,delete this;如果需要退出消息循环,则响应WM_DESTROY消息,PostQuitMessage。
edisonli 2008-07-28
  • 打赏
  • 举报
回复
正式线程没有结束的原因。但是还是有问题的,关闭是销毁了对话框,但是在打开的时候就afxwin2.inl 错误
sking2008 2008-07-28
  • 打赏
  • 举报
回复
OnNcDestroy
edisonli 2008-07-28
  • 打赏
  • 举报
回复
我是在导出函数中创建的,我需要对话框自销毁,怎么能在导出函数中销毁呢

不过,我调试了一下,我在对话框中建了一个线程,不知道是不是线程没有结束出的问题

怎样才能在销毁时判断线程结束没有呢
Allen_zhang 2008-07-28
  • 打赏
  • 举报
回复
销毁的位置不对
在哪里创建就在那里销毁
edisonli 2008-07-28
  • 打赏
  • 举报
回复
DestroyWindow();
就是这个出的错,去掉这个就没问题,但是对话框不能真正的销毁
edisonli 2008-07-28
  • 打赏
  • 举报
回复
不正确啊
重载OnNcDestroy和CDialog::OnClose(); 注释掉。 都不行
我的对话框是CUpdateDlg *uDlg;uDlg = new CUpdateDlg();出来的
cnzdgs 2008-07-28
  • 打赏
  • 举报
回复
OnClose就是要这样写,估计你还在其它地方做了处理,你调试运行程序,出错时看调用堆栈中的信息,找出引起错误的代码。
zhoujianhei 2008-07-28
  • 打赏
  • 举报
回复

void CUpdateDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
DestroyWindow();
//CDialog::OnClose();
}

CDialog::OnClose(); 注释掉。
zhoujianhei 2008-07-28
  • 打赏
  • 举报
回复
OnNcDestroy
{
delete this;
}
重载OnNcDestroy,并注释掉原来的调用。
edisonli 2008-07-28
  • 打赏
  • 举报
回复
先CDialog::OnClose();
再DestroyWindow();

还是不行

DestroyWindow(); 会被主动调用?应该没有的,关闭对话框后,重新打开,看到对话框中的进度条还在继续走
thirddata 2008-07-28
  • 打赏
  • 举报
回复
DestroyWindow(); 会被主动调用,不需要你显式的这样调用,即使想显示的调用,最好判断一下m_hWnd是否为NULL,如果为NULL,说明DestroyWindow(); 已经调用过了
加载更多回复(1)
一、VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) 第二部分:VS2010/MFC应用程序框架 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC消息映射机制概述) 第三部分:对话框 VS2010/MFC编程入门之六(对话框:创建对话框板和修改对话框属性) VS2010/MFC编程入门之七(对话框:为对话框添加控件) VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序) VS2010/MFC编程入门之十一(对话框对话框及其弹出过程) VS2010/MFC编程入门之十二(对话框:非对话框的创建及显示) VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍) VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示) VS2010/MFC编程入门之十六(对话框:消息对话框) VS2010/MFC编程入门之十七(对话框:文件对话框) VS2010/MFC编程入门之十八(对话框:字体对话框) VS2010/MFC编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC编程入门之二十(常用控件:静文本框) VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control) VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box) VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状栏 VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解) VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用) VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类) VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC编程入门之三十八(状栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC编程入门之三十九(文档、视图和框架:概述) VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口) 第七部分:MFC常用类 VS2010/MFC编程入门之四十二(MFC常用类:CString类) VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类) VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer) VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类) VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理) 第八部分:字体和文本输出 VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类) VS2010/MFC编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数) VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen) VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush) 第十部分:Ribbon界面开发 VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架) VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件) VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数) 本文来源于鸡啄米 http://www.jizhuomi.com/ , 原文地址:http://www.jizhuomi.com/software/257.html

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧