CFileDialog(MFC)的例外情况

时间:2011-01-20 09:06:40

标签: c++ exception mfc

我的程序中有以下几行C ++代码

CFileDialog dialog(true);
 CString strFileName=L"";
 INT_PTR nResult = dialog.DoModal();
 if(nResult == IDOK)
  // Exception spotted here
  // Debug information gives me --> dialog = {CFileDialog hWnd=0x00000000}
  // What's the heck?
  strFileName=dialog.GetFolderPath();

问题是:当我在运行Windows XP的PC上执行程序时,总会有一个丑陋的异常,我不知道它为什么会发生。但是当我将它复制到运行Windows 7的另一台PC时,一切都很好。

我很绝望。你能告诉我为什么吗?

3 个答案:

答案 0 :(得分:3)

您需要致电

DWORD WINAPI CommDlgExtendedError(void);

在实例化CFileDialog之后检查它是否已实例化,如果不是,为什么不呢。

修改

在关闭对话框后,您无法调用GetFolderPath,这是DoModal()返回时的状态。在有关如何传递缓冲区以保存文件名的备注下,请查看此MSDN page

答案 1 :(得分:2)

在Window7机器上构建并部署到XP的乐趣。

如果您追踪MFC代码:

调用

:: GetVersion()并为Windows Visa及更高版本执行各种不同的代码。即表现不同。

所以这意味着如果你在WIN7中的DoModal之后调用了GetPathName,GetFileName或GetFolderPath,它就像你期望的那样工作(比如Java)。对于Windows XP,您将不正确,软件崩溃。

答案 2 :(得分:0)

我无法在XP上使用GetFolderPath,但GetPathName没问题。