运行到声明cfiledialog崩溃(cfiledialog domodal返回时崩溃)

http://www.itjxue.com  2023-02-11 02:18  来源:未知  点击次数: 

基于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目录下。

试一下吧

希望采纳

(责任编辑:IT教学网)

更多

推荐其他源码文章