DoModal 在 Visual Studio 2010 中崩溃

Posted

技术标签:

【中文标题】DoModal 在 Visual Studio 2010 中崩溃【英文标题】:DoModal crashed in visual studio 2010 【发布时间】:2013-06-26 13:03:46 【问题描述】:

我正在浏览Multiple Selection in a File Dialog 代码项目的文章, 此代码适用于 Visual Studio 2005,但是当我在 Visual Studio 2010 上运行它时,它给了我如下调试断言,

MultiSelect.exe 中 0x76f515de 处未处理的异常:0xC0000005: 访问冲突读取位置 0x00000020。

接下来,

 int ret = CFileDialog::DoModal();      //**Point where assersion occures**

整个函数如下(注:-CFECFileDialog继承自CFileDialog)

int CFECFileDialog::DoModal()

    if (Files)
    
        delete[] Files;
        Files = NULL;
        delete[] Folder;
        Folder = NULL;
    

    int ret = CFileDialog::DoModal();      //**Point where assersion occures**

    if (ret == IDCANCEL)
    
        DWORD err = CommDlgExtendedError();
        if (err == FNERR_BUFFERTOOSMALL/*0x3003*/ && Files)
            ret = IDOK;
    
    return ret;

我也向那篇文章的作者提问,但他没有回复。

【问题讨论】:

你需要学习如何调试这样的异常。查看调用堆栈以查看导致崩溃的代码是必要的第一步。 您确定您的CFECFileDialog 对象有效吗? @HansPassant 实际调试时把我扔进了程序集。所以没有机会一步一步调试。 @LuchianGrigore 是的,我确定,我的 CFECFileDialog 对象是有效的。 调用堆栈不显示程序集。它显示了导致问题的代码的踪迹。如果您不知道如何阅读,那么您当然应该将其放在您的问题中。 【参考方案1】:

我从 CodeProject 下载了项目,但在 CFECFileDialog::OnFileNameChange 处发生了崩溃。使用 VS2010 调试器和“Go to disassembly”选项,我看到崩溃是由 GetParent 返回 NULL 引起的。

由于我不知道为什么使用“父”句柄调用 CommDlg_OpenSave_* 宏,所以我只是尝试使用“this”句柄 (m_hWnd) 调用它们。为我工作。

尝试在 CFECFileDialog::OnFileNameChange 中将“GetParent()->m_hWnd”的每个实例替换为“m_hWnd”

编辑:精确,我没有得到你在 DoModal 中的崩溃

【讨论】:

@Sankaganak 请让我们知道 CFECFileDialog::OnFileNameChange 中的建议修复是否使崩溃消失

以上是关于DoModal 在 Visual Studio 2010 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

visual studio2015怎么设置.net版本

visual studio 2005 图像上 添加 数字

哪些C语言函数在visual studio2015报错并怎么修改

visual studio2013怎么设置成中文的

电脑里的visual studio 2010怎么打开

microsoft visual studio创建button背景颜色代码