CFileDialog dlg(TRUE);
if (dlg.DoModal()==IDOK)
{    
//调试程序时,执行到这里VC就弹出一个对话框内容如下
Unhadled exception in ProcessLook.exe(NTDLL.DLL): 0xC0000005 : Access violation 重新调试,进入CFileDialog::DoModule()        if (m_bOpenFileDialog)
nResult = ::GetOpenFileName(&m_ofn);  <---------------发现exception在这里产生
else
nResult = ::GetSaveFileName(&m_ofn);而且这种情况时有发生,有时却正常。如果代码出在自己的程序则好办,在系统就不知怎样办?
操作系统:Windows2000 professional 
    vc 6.0中文版

解决方案 »

  1.   

    一个另外的问题,为什么用了DoModal之后还要用GetOpenFileName函数,是为了什么目的。
      

  2.   

    OPENFILENAME ofn;       // common dialog box structure
    char szFile[260];       // buffer for file name
    HWND hwnd;              // owner window
    HANDLE hf;              // file handle// Initialize OPENFILENAME
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hwnd;
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;// Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) 
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
            0, (LPSECURITY_ATTRIBUTES) NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);
      

  3.   

    过风,我还以为yes_start(刚刚开始) 是楼住呢
      

  4.   

    char BASED_CODE szFilter[] = "Text File(*.txt)|*.txt||";
    CFileDialog myDlg(true,NULL,buf,0,szFilter,this);
    if(IDOK==myDlg.DoModal())
    {
    fileName=myDlg.GetPathName();
    }
      

  5.   

    换  yes_start(刚刚开始) 的方法不好吗??我只是路过,解释不了这个问题,帮不了你。
      

  6.   

    CFileDialog dlg(TRUE, _T("*"), _T("*.*"),
    OFN_PATHMUSTEXIST | OFN_READONLY | OFN_EXPLORER,
    _T(所有文件(*.*)|*.*||"),
    NULL );if(dlg.DoModal() == IDOK)
    {    
        CString str = dlg.GetPathName();
    }这样是没问题的to yes_start(刚刚开始)
    "一个另外的问题,为什么用了DoModal之后还要用GetOpenFileName函数,是为了什么目的。"
    CFileDialog 是MFC对 GetOpenFileName() 和 GetSaveFileName()的封装,最后还是要调用这两个函数的
      

  7.   


    m_ofn:
    ----------------------------------
    lStructSize  0x4c
    hwndOwner 0x308c8
    hInstance 0x400000
    lpstrFilter 0x0
    lpstrCustomFilter 0x0
    nMaxCustFilter 0x0
    nFilterIndex 0x0
    lpstrFile 0x12eb7c  ""           
    nMaxFile 0x104
    lpstrFileTitle 0x12eb3c ""
    nMaxFileTitle 0x40
    lpstrInitialDir 0x0
    lpstrTitle 0x0
    Flags  0x00880026
    nFileOffset 0x0
    nFileExtension 0x0
    lpstrDefExt 0x0
    lCustData 0x0
    lpfnHook 0x5f407efa _AfxCommDlgProc(HWND__*,unsined int,unsigned int,long)
    lpTemplateName 0x0 ""
    nResult 0x42460f
      

  8.   

    "0xC0000005的exception "是存取违规,你接受输出的参数有问题是否你提供的buffer不够大?
      

  9.   

    你说的buffer是指什么?CFileDialog::DoModal()要设置buffer的吗?请说明白点,非常谢谢!!
      

  10.   

    奇怪的是,在win2000中才会产生这种异常,而98不会,不会是否操作系统有问题