none
CFileDialog 关闭时出现 KERNEL32! 7c809823()错误 RRS feed

  • 问题

  • 我用的是vc6.0编译器,在主对话框的按钮响应处理函数中,如下代码:

    void CTabDlg::OnButton7()
    {
     CString strFilter="ËùÓÐÖ§³ÖÎļþ(*.mp3,*.wav,*.wma)|*.mp3;*.wav;*.wma||";
     CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter);
     if (IDOK == filedlg.DoModal())
     {
      filedlg.GetFileName();
      return ;                      //出错(1)
     }

    }                           //出错(2)

    在(1)处是按打开出现0x7c809823指令引用的0x422d7359内存,该内存不能为written,在(2)处是按取消或者关闭按钮出现的是0x7c809823指令引用的0xccccccc0内存,该内存不能为written。

    首先是这段程序没有错误,我在其他的project中运行实验过,完全正常,但是,当我放到当前的project中的时候,由于需要在StdAfx.h中添加了如下宏定义

    #define WINVER 0x0500
    #define _WIN32_WINNT 0x0500

    然后再次编译运行这段程序,就会出现如题的在call stack中的错误位置点

    KERNEL32! 7c809823()
    CFileDialog::~CFileDialog() + 71 bytes

    调试时候,在输出窗口最后显示的是First-chance exception in Tab.exe (KERNEL32.DLL): 0xC0000005: Access Violation.

    请高手帮助分析一下。这个应该不是单个人的错误。

    2010年5月18日 2:15

答案