2013-09-01 18 views
0

我開發了一個簡單的MFC程序。它負責使用GDAL庫來讀寫geotiff文件。爲此,我從CFileDialog派生了兩個類,名爲ManageOpenGeoTiffFilesManageSaveGeoTiffFiles,每個類都有3個函數來支持讀和寫geotiffs。在我的程序中第二次使用CFileDialog獲取運行時錯誤調試斷言失敗

這是構造函數和析構函數爲其中的一個頭:

ManageOpenGeoTiffFiles::ManageOpenGeoTiffFiles(void):CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,_T("Tiff Files (*.tif)|*.tif|"),0,0,true) 

ManageOpenGeoTiffFiles::~ManageOpenGeoTiffFiles(void) 
{ 
} 

,這是我如何使用它在我的代碼:

void CInitialJobProject2FinalDlg::OnBnClickedBtnopen() 
{ 
// TODO: Add your control notification handler code here 
m_oglWindow1.WantToPan = false; 
m_oglWindow1.WantToUseZoomTool = false; 
CString fullpath; 
if (m_openFiles.DoModal() == IDOK) 
{ 
    fullpath = m_openFiles.GetPathName(); 
    try{ 
     m_openFiles.OpenGeoTiffAsReadonly(fullpath); 
    } 
    catch(CFileException *e){ 
     MessageBox(_T("the file could not be opened"),_T("error"),MB_OK); 
     this ->ExitMFCApp(); 
    } 
    m_openFiles.ReadRasterData(); 
} 
else 
    MessageBox(_T("you pressed cancel and can not proceed."),_T("error"),MB_ICONERROR); 
} 

萬物確定,當我使用OpenSave按鈕在我的程序中第一次,但當涉及到第二次使用我得到的錯誤:

enter image description here
如果我點擊忽略:在線路發生
enter image description here
此錯誤:

if (m_openFiles.DoModal() == IDOK) 
每一對話

即使我點擊cancel第一次,誤差在第二次使用對話框occures。 dlgFile.cpp 398

線如下:

hr = (static_cast<IFileDialog*>(m_pIFileDialog))->SetFileTypes(nFilterCount, pFilter); 
      ENSURE(SUCCEEDED(hr)); 

編輯部分:

回答的評論之一,併爲他人提供的信息太:

當我設置斷點時,斷言失敗時會看到以下結果:

pFilter 0x00fc3660 {pszName=0x00fc36a8 "Tiff Files (*.tif)" pszSpec=0x00fc3788 "*.tif" } 
hr E_UNEXPECTED 

,結果在第一次時,斷言不會失敗如下:

pFilter 0x004cfca0 {pszName=0x004cfce8 "Tiff Files (*.tif)" pszSpec=0x004cfdc8 "*.tif" } 
hr S_OK 
+0

向我們展示pFilter指向的內容。一旦ASSERT發生了什麼,hr的價值是什麼? –

+0

@Michael Walz我已經回答了您的評論,請參閱**編輯部分** – sepideh

回答