运行到声明cfiledialog崩溃(cfiledialog domodal返回时崩溃)
基于MFC,opencv中的cvCvtcolor函数总是出错,怎么回事
你的源图像是彩色吗?如果是彩色,那么转换成的灰度图应该是单通道的
pimg1g = cvCreateImage(cvGetSize(pimg1),pimg1-depth,pimg1-nChannels);
改为:
pimg1g = cvCreateImage(cvGetSize(pimg1),pimg1-depth,1);
CFileDialog打开一个文件,然后将文件路径名称等信息存在数据库access里面。m_pRecordset->Open老是报错
m_pRecordset-Open的出错返回值是什么?
另外我看你的用数据表名叫 task,建议不要用这种名字,可能是内部保留字来的,尝试把数据表名改一下 xxx_task或者其它名字
CFileDialog::DoModal()导致程序关闭
程序就自动关闭是因为出错崩溃了,所以被操作系统自动关闭。
出错的语句是这句
fileDlg.m_ofn.lpstrFileTitle=_T("保存文件");
因为m_ofn.lpstrFileTitle这个成员是用来接收输入的文件名的(MSDN上的说明是:Pointer to a buffer that receives the file name and extension (without path
information) of the selected file. This member can be NULL.)
所以你给个常量给这个成员当然不行了。
我不太清楚你的目的是什么,简单fix这个问题可以把这句话注释掉,
也可以
char buf[MAX_PATH];
fileDlg.m_ofn.lpstrFileTitle=buf;
这样来解决
CFileDialog问题。异常退出
哈哈,这个问题我遇过,我先说一下我的情况,我的环境是VC6,使用是最新的SDK,我在stdafx.h里加入了
#define _WIN32_WINNT 0x0501
因为我想用最新的函数,否则条件编译过不去,问题就出在这个宏定义上,为什么呢?
因为在
CFileDialog::CFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags,
LPCTSTR lpszFilter, CWnd* pParentWnd) : CCommonDialog(pParentWnd)
{
memset(m_ofn, 0, sizeof(m_ofn)); // initialize structure to 0/NULL
m_szFileName[0] = '\0';
m_szFileTitle[0] = '\0';
m_pofnTemp = NULL;
m_bOpenFileDialog = bOpenFileDialog;
m_nIDHelp = bOpenFileDialog ? AFX_IDD_FILEOPEN : AFX_IDD_FILESAVE;
m_ofn.lStructSize = sizeof(m_ofn);
m_ofn.lpstrFile = m_szFileName;
m_ofn.nMaxFile = _countof(m_szFileName);
m_ofn.lpstrDefExt = lpszDefExt;
m_ofn.lpstrFileTitle = (LPTSTR)m_szFileTitle;
m_ofn.nMaxFileTitle = _countof(m_szFileTitle);
m_ofn.Flags |= dwFlags | OFN_ENABLEHOOK | OFN_ENABLESIZING;
if (!afxData.bWin4 AfxHelpEnabled())
m_ofn.Flags |= OFN_SHOWHELP;
if (afxData.bWin4)
{
m_ofn.Flags |= OFN_EXPLORER;
m_ofn.hInstance = AfxGetResourceHandle();
}
m_ofn.lpfnHook = (COMMDLGPROC)_AfxCommDlgProc;
// setup initial file name
if (lpszFileName != NULL)
lstrcpyn(m_szFileName, lpszFileName, _countof(m_szFileName));
// Translate filter into commdlg format (lots of \0)
if (lpszFilter != NULL)
{
m_strFilter = lpszFilter;
LPTSTR pch = m_strFilter.GetBuffer(0); // modify the buffer in place
// MFC delimits with '|' not '\0'
while ((pch = _tcschr(pch, '|')) != NULL)
*pch++ = '\0';
m_ofn.lpstrFilter = m_strFilter;
// do not call ReleaseBuffer() since the string contains '\0' characters
}
}
这个是CFileDialog 的构造函数,
可以看到:m_ofn.lStructSize = sizeof(m_ofn);
这个句话已经被编译在mfc42.dll里,也就是说,不管你定义没有定义#define _WIN32_WINNT 0x0501
它的大小都是一样大的,从MSDN可看到
typedef struct tagOFN {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT = 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT = 0x0500)
} OPENFILENAME, *LPOPENFILENAME;
这个条件编译很得要,会导致这个结构体大小不一样大
这就是为什么会崩溃的原因,一个大东西放入一个小空间里面绝对会溢出。
支持就顶一下,这个错误花了我三四个小时才找出来
MFC中的CFileDialog问题.下面代码看似没有问题,但是拿到程序中会导致程序崩溃
最好不要用指针去这样做,直接这样CFileDialog fDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
这样就一定不会出问题,
而你用的是指针的方法,CFileDialog* fDlg=new CFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
指针的不安全,一般不适用在MFC,
如果一定要的,看看谁否delete fDlg;
了吗。因为CFileDlog会占用很多资源的,要释放的
WIN7中CFileDialog无法保存不存在文件问题
朋友,你好!
你先在网上下载一个COMMDLG.DLL
然后将commdlg.dll复制到(系统盘)C:WindowsSystem32目录下。
试一下吧
希望采纳