一段打开文档的代码,前一段时间好好地,今天突然出问题了.Access violation 的异常,跟踪发现出在CFileDialog析构的时候.
测试环境:winxp pro + sp2;
编译:vc6.0+sp5;
void CTestFile::OnOpen()
{
char szFilter[256] = {0};
lstrcpy(szFilter, "WMV File (*.wmv)|*.wmv|");
lstrcat(szFilter, "媒体文件 (媒体类型)|*.wmv;*.avi;*.mpeg;*.mpg;*.asf||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, szFilter, this);
if(dlg.DoModal() == IDOK)
{
}
}
搞了好久,才找到原因,就是因为在stdafx.h中加了下面的两个宏;
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
去掉这两个宏的话,没问题.
如果非要用高版本的platform sdk的话,下面的方法也是一个解决办法.
void CTestFile::OnOpen()
{
char szFilter[256] = {0};
lstrcpy(szFilter, "WMV File (*.wmv)|*.wmv|");
lstrcat(szFilter, "媒体文件 (媒体类型)|*.wmv;*.avi;*.mpeg;*.mpg;*.asf||");
CFileDialog *pFileDlg = new CFileDialog(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, szFilter, this);
if(pFileDlg)
{
pFileDlg->DoModal();
delete pFileDlg;
pFileDlg = NULL;
}
}