我的程序中有以下几行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时,一切都很好。
我很绝望。你能告诉我为什么吗?
答案 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没问题。