Я разработал простую программу с MFC. Он отвечает за чтение и запись файлов геотипов с использованием библиотеки GDAL. Для этой цели я получил два класса из класса CFileDialog
с именем ManageOpenGeoTiffFiles
и ManageSaveGeoTiffFiles
, каждый из которых имеет 3 функции для поддержки геотипов чтения и записи.Второе использование CFileDialog в моей программе получает ошибку времени выполнения Debug Assertion failed
это заголовок конструктора и деструктора для одного из них:
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);
}
Everythings нормально, когда я использую Open
или Save
кнопка в первый раз в моей программе, но когда дело доходит до второго использования, я получаю сообщение об ошибке:
и если я нажимаю игнорировать:
эта ошибка возникает в строке:
if (m_openFiles.DoModal() == IDOK)
каждого диалога, и даже если я нажимаю cancel
в первый раз, встретилась ошибка во втором использовании диалога.
Линия 398 из dlgFile.cpp выглядит следующим образом:
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
Покажите нам, на что указывает pFilter. Какова ценность hr, как только ASSERT? –
@Michael Walz Я ответил на ваш комментарий, пожалуйста, просмотрите раздел **, отредактированный ** – sepideh