MFC中CFileDialog的问题,困扰我好几周了,各位帮忙看看!!!!

trytochange 2014-09-19 04:07:47
我在一个程序里面用了CFileDialog类,用来加载文件。但是它会不定时的崩溃,有时候正常,有时候刚弹出文件对话框,闪一下就无故退出了。调试起来也特别不好弄,问题是不定时出现。网上说的方法我也都试过了,不起作用。有哪位知道,麻烦教一下我,不胜感激啊!!!!

应该不是我其他代码的原因,我重新开了一个工程,其他什么都没改,就添了以下代码,问题依旧;

void CtestMFCDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
//OnOK();
CFileDialog *pFileDlg = NULL;
TCHAR szFilters[] = _T("所有文件(*.*)|*.*||");

pFileDlg = new CFileDialog(TRUE, NULL, NULL, OFN_NOCHANGEDIR, szFilters, this);
if (pFileDlg != NULL)
{
pFileDlg->DoModal();
delete pFileDlg;
}
}
...全文
745 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-11-14
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
赵4老师 2014-11-14
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
蒋晟 2014-10-10
  • 打赏
  • 举报
回复
要new是因为MFC 6.0的bug,没有预估到Windows 2000会增加OPENFILENAME的大小 7.0以上版本的MFC不用new 基本上,如果Windows的资源管理器会崩溃的场合,文件对话框也经常会崩溃,所以要经常看是不是有KB2718841这样的补丁出来,或者是不是安装了Adobe PDF的文件预览插件。
HUSTYZHY 2014-09-22
  • 打赏
  • 举报
回复
trytochange 2014-09-22
  • 打赏
  • 举报
回复
引用 11 楼 cvbtvbwu 的回复:
没见人会new CFileDialog。。。。直接用CFileDialog dlg不行么。试试这个再说
我就是因为直接用出问题,然后有人说用new能解决,才这么做的,,,,
凌乱哥 2014-09-20
  • 打赏
  • 举报
回复
文件对话框是模态的,你用new和delete来搞就会有问题
叶恭介叶恭介 2014-09-19
  • 打赏
  • 举报
回复
没见人会new CFileDialog。。。。直接用CFileDialog dlg不行么。试试这个再说
trytochange 2014-09-19
  • 打赏
  • 举报
回复
引用 9 楼 arpnet99 的回复:
如果是VS2005的话,需要安装SP1的补丁
好吧,我试试
这不是鸭头 2014-09-19
  • 打赏
  • 举报
回复
如果是VS2005的话,需要安装SP1的补丁
trytochange 2014-09-19
  • 打赏
  • 举报
回复
引用 6 楼 wxhxj0268 的回复:
我这样做你这个,没发现问题

    CString szFilters = _T("所有文件(*.*)|*.*||");
	CFileDialog fileDlg(true, NULL, NULL, OFN_NOCHANGEDIR, szFilters, this);
	if(fileDlg.DoModal()!=IDOK)
	{
		// 操作完成
		return;
	}
你好,一开始我也是这么做的。不过老是出我说的那个问题。可能这个跟环境也有关吧。我在别的电脑上也试过,有的也基本不出问题的,,,苦恼中
trytochange 2014-09-19
  • 打赏
  • 举报
回复
引用 5 楼 happyparrot 的回复:
这个,我也不知道为什么,只是平时一直这么用,从来没出现过问题。 不过你这里确实不需要new,临时变量就可以了。 你的开发环境是什么?
我的环境是,windows server 2008 R2 + vs2005; 我先按你那样改试试。至少看着概率小了,,,。 另外,我是在网上看到有人说new了之后能解决问题,我才这么做的,不过不起作用
笨笨仔 2014-09-19
  • 打赏
  • 举报
回复
我这样做你这个,没发现问题

    CString szFilters = _T("所有文件(*.*)|*.*||");
	CFileDialog fileDlg(true, NULL, NULL, OFN_NOCHANGEDIR, szFilters, this);
	if(fileDlg.DoModal()!=IDOK)
	{
		// 操作完成
		return;
	}
快乐鹦鹉 2014-09-19
  • 打赏
  • 举报
回复
这个,我也不知道为什么,只是平时一直这么用,从来没出现过问题。 不过你这里确实不需要new,临时变量就可以了。 你的开发环境是什么?
trytochange 2014-09-19
  • 打赏
  • 举报
回复
引用 2 楼 xihu1364 的回复:
拿着你的代码,试试没有问题 看上去,也没啥问题... 有点小建议,既然new了,又delete了,为何不使用局部变量
你好,这个问题是不定时出现的,,,所以很苦恼,可能在别的电脑都不出现,,,。你可以帮忙分析一下一般会是啥原因,,,,,。另外,我的pFileDlg不是局部变量么,,,,
trytochange 2014-09-19
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
你逐步修改调试,去找问题 CFileDialog fd(TRUE,"*.ZIP","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"ZIP文件|*.ZIP|",NULL); 你改成这样,看看还死不死
你好,我用你这个试了多次,没有出现问题。但也不能说是没问题了,因为本来就是不定时出现的,我想知道你这样写的理由是什么?最后一个参数的问题吗?谢谢!!!
版主大哥 2014-09-19
  • 打赏
  • 举报
回复
拿着你的代码,试试没有问题 看上去,也没啥问题... 有点小建议,既然new了,又delete了,为何不使用局部变量
快乐鹦鹉 2014-09-19
  • 打赏
  • 举报
回复
你逐步修改调试,去找问题 CFileDialog fd(TRUE,"*.ZIP","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"ZIP文件|*.ZIP|",NULL); 你改成这样,看看还死不死

15,979

社区成员

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

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