由于要用到2000的一些特性,我使用了#define _WIN32_WINNT 0x0500宏定义,但此后当我用到公用对话框时总是在析构函数的地方出现内存为读的错误,当我把宏改成0x0400时就没问题了。(我做过了多次试验,可以确定就是因为这个宏引起的问题)哪位高手指点一下这是为什么?怎么解决,我是说在保持#define _WIN32_WINNT 0x0500的情况下安全使用公用对话框。void CTransParamDlg::OnSaveTxt()
{
TCHAR szFilters[] = _T("Text files(*.txt)| *.txt|All files(*.*)|*.*| |"); CFileDialog dlg(FALSE, _T("txt"), _T("TransList.txt"),
OFN_OVERWRITEPROMPT| OFN_PATHMUSTEXIST| OFN_HIDEREADONLY, 
szFilters);
if(dlg.DoModal() == IDOK)
{
TRACE1("filename:%s", dlg.GetPathName());
}
} //<------执行到这里时弹出错误
//错误为:First-chance exception in CDTExTrans.exe (KERNEL32.DLL): 0xC0000005: Access Violation.

解决方案 »

  1.   

    CString szFilters= _T("Text files(*.txt)| *.txt|All files(*.*)|*.*|");CFileDialog dlg(FALSE, _T("txt"), _T("TransList.txt"),
    OFN_OVERWRITEPROMPT| OFN_PATHMUSTEXIST| OFN_HIDEREADONLY, 
    szFilters,this);
      

  2.   

    to:lwg7603(刑满释放人员) 
    我用您的代码替换了我的,还是有原来的问题
      

  3.   

    我在出问题时查看了调用堆栈
    KERNEL32! 77e74a1d()            <-------------箭头指向这里时出的问题
    CFileDialog::~CFileDialog() + 71 bytes
    CTestMagnetButtonDlg::OnButton1() line 221 + 15 bytes
      

  4.   

    CString szFilters= _T("Text files(*.txt)| *.txt|All files(*.*)|*.*|");CFileDialog dlg(FALSE, _T("txt"), _T("TransList.txt"),
    OFN_OVERWRITEPROMPT| OFN_PATHMUSTEXIST| OFN_HIDEREADONLY, 
    szFilters,this);#if (_WIN32_WINNT >= 0x0500)
      dlg.m_ofn.pvReserved = NULL;
      dlg.m_ofn.dwReserved = 0;
      dlg.m_ofn.FlagsEx = 0;
    #endif // (_WIN32_WINNT >= 0x0500)
      

  5.   

    和我遇到的问题一样:
    看http://msdn.microsoft.com/msdnmag/issues/0400/c/c0400.asp
      

  6.   

    他的代码有点问题,下面是可以正确执行的代码:
             OPENFILENAME ofn;
             TCHAR szFile[MAX_PATH];
             TCHAR szFilters[]="Event Files (*.evt)\0*.evt\0All Files (*.*)\0*.*\0\0";
    memset(szFile,0,MAX_PATH);
    memset((LPTSTR)&ofn,0,sizeof(OPENFILENAME));
    ofn.lStructSize=sizeof(OPENFILENAME);
    ofn.hwndOwner=this->m_hWnd;
    ofn.Flags=OFN_HIDEREADONLY|OFN_PATHMUSTEXIST;
    ofn.lpstrFilter=(LPTSTR)szFilters;
    _tcscpy(szFile,"*.evt");
    ofn.lpstrFile=szFile;
    ofn.nMaxFile=MAX_PATH;
    ofn.lpstrDefExt="evt";
    if(GetSaveFileName(&ofn)==0)
                         。