mfc的CFileDlg在VC6和更高版本的(个人使用的VS2008)使用上有所不同。
在VS2008中,可以直接使用类定义一个对象。如下:
CFileDlg dlg(xxx);
但是,在VC6中,使用上述代码,会导致程序崩溃。
解决的方法是使用new的方式创建对象。如下:
CFileDialog* pDlg = new CFileDialog(xxx);
具体为啥我也不是很清楚。但是网友总是棒棒的。在网上找一篇帖子【MFC中CFileDialog的问题,困扰我好几周了,各位帮忙看看!!!!】,当然贴主只是提问,问题的原因在#15。下面是#15原话:
要new是因为MFC 6.0的bug,没有预估到Windows 2000会增加OPENFILENAME的大小
7.0以上版本的MFC不用new
基本上,如果Windows的资源管理器会崩溃的场合,文件对话框也经常会崩溃,所以要经常看是不是有KB2718841这样的补丁出来,或者是不是安装了Adobe PDF的文件预览插件。