0

MFCで簡単なプログラムを開発しました。GDAL ライブラリを使用して geotiff ファイルの読み取りと書き込みを担当します。この目的のために、CFileDialognamedクラスから 2 つのクラスを派生さManageOpenGeoTiffFilesせ、ManageSaveGeoTiffFilesそれぞれに geotiff の読み取りと書き込みをサポートする 3 つの関数を用意しました。

これは、そのうちの 1 つのコンストラクターとデストラクターのヘッダーです。

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);
}  

OpenプログラムでまたはSaveボタンを初めて 使用するときはすべて問題ありませんが、2回目の使用になるとエラーが発生します。

ここに画像の説明を入力
無視をクリックすると
ここに画像の説明を入力
、次の行でこのエラーが発生します。

if ( m_openFiles.DoModal() == IDOK )  

各ダイアログcancelの 1 回目をクリックしても、2 回目のダイアログの使用でエラーが発生します。

dlgFile.cpp の 398 行目は次のとおりです。

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

編集されたセクション:

コメントの 1 つに回答し、他の人にも情報を提供する:

ブレークポイントを設定すると、アサーションが失敗したときに次の結果が表示されました。

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
4

1 に答える 1