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中文版
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);
CFileDialog myDlg(true,NULL,buf,0,szFilter,this);
if(IDOK==myDlg.DoModal())
{
fileName=myDlg.GetPathName();
}
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()的封装,最后还是要调用这两个函数的
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