调试断言失败!文件:f:\ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ mfc \ wingdi.cpp(行:1119)

时间:2013-12-16 15:03:28

标签: c++ visual-c++ mfc

我的MFC程序有一个问题,我不知道如何解决。

我正在编写一个涉及数据序列化的程序。我决定覆盖OnFileOpen和OnFileSave函数,因为我想在打开/保存文件时修改文件对话框。

奇怪的是,在重写这些功能之后。我意识到我无法使用默认的拖放功能加载文件+单击最近文件列表中的文件。如果我这样做,会弹出以下错误窗口:

调试断言失败! 文件:f:\ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ mfc \ wingdi.cpp行:1119 有关程序如何导致断言失败的信息,请参阅.... etc

但是如果我通过正常步骤打开文件(菜单栏 - >文件 - >打开文件),程序运行正常,没有任何投诉。

我查看了wingdi.cpp文件,第1119行与CGdiObject :: Attach()函数关联...但我的程序根本不涉及Attach()函数...

有人可以帮我解决这个奇怪的行为吗?

我的首要代码如下:

void CXXXDoc::OnFileOpen()
{
    // TODO: Add your command handler code here

TCHAR szFilters[]= _T("XXX Type Files (*.xxx)|*.xxx|All Files (*.*)|*.*||");
CFileDialog fileDlg(TRUE, _T("xxx"), _T("*.xxx"), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, szFilters);
if(fileDlg.DoModal() == IDOK)
{
    CFile oldFile;
    ASSERT (oldFile != NULL);
    oldFile.Open(fileDlg.GetPathName(), CFile::modeRead | CFile::shareExclusive);
    FilePathName = fileDlg.GetPathName();
    SetTitle(FilePathName);
    AfxGetApp()->AddToRecentFileList(FilePathName);
    CArchive loadArchive(&oldFile, CArchive::load | CArchive::bNoFlushOnDelete); // Create the archive to load data, the archive must be closed manually after the loading process      
    Serialize(loadArchive);
    loadArchive.Close();
    oldFile.Close();        
    UpdateAllViews(0);

}

}

void CXXXDoc::OnFileSave()
{
    CFile newfile;
    ASSERT (newfile != NULL);
    newfile.Open(FilePathName, CFile::modeWrite);
    CArchive saveArchive(&newfile, CArchive::store);   // Create the archive to save data,
    Serialize(saveArchive);
    saveArchive.Close();
    newfile.Close();
}

0 个答案:

没有答案