以下是正常可以处理的程序:
CFileDialog mFileDlg(true,NULL,NULL,OFN_ALLOWMULTISELECT,"All File(*.*)|*.*|BMP文件(*.BMP)|*.BMP",AfxGetMainWnd());
CString buf(" ",10000);
mFileDlg.m_ofn.lpstrFile = buf.GetBuffer(10000);
mFileDlg.DoModal();
MessageBox(mFileDlg.GetPathName());
buf.ReleaseBuffer();
但如果改成这样的就会出错:
CFileDialog mFileDlg(true,NULL,NULL,OFN_ALLOWMULTISELECT,"All File(*.*)|*.*|BMP文件(*.BMP)|*.BMP",AfxGetMainWnd());
LPSTR buf = new char[10000];
mFileDlg.m_ofn.lpstrFile = buf;
mFileDlg.DoModal();
MessageBox(mFileDlg.GetPathName());
delete buf;该代码会在mFileDlg.DoModal();处出错。我就不明白,
同样都是需要给LPSTR类型的mFileDlg.m_ofn.lpstrFile传地址,又有相同的内存大小,为何第二种就不行呢?
CFileDialog mFileDlg(true,NULL,NULL,OFN_ALLOWMULTISELECT,"All File(*.*)|*.*|BMP文件(*.BMP)|*.BMP",AfxGetMainWnd());
CString buf(" ",10000);
mFileDlg.m_ofn.lpstrFile = buf.GetBuffer(10000);
mFileDlg.DoModal();
MessageBox(mFileDlg.GetPathName());
buf.ReleaseBuffer();
但如果改成这样的就会出错:
CFileDialog mFileDlg(true,NULL,NULL,OFN_ALLOWMULTISELECT,"All File(*.*)|*.*|BMP文件(*.BMP)|*.BMP",AfxGetMainWnd());
LPSTR buf = new char[10000];
mFileDlg.m_ofn.lpstrFile = buf;
mFileDlg.DoModal();
MessageBox(mFileDlg.GetPathName());
delete buf;该代码会在mFileDlg.DoModal();处出错。我就不明白,
同样都是需要给LPSTR类型的mFileDlg.m_ofn.lpstrFile传地址,又有相同的内存大小,为何第二种就不行呢?
解决方案 »
- vc程序创建空文档失败
- MFC的全局异常处理放在哪里比较好?
- 请问AfxMessageBox有哪些返回值啊,怎么设置?
- 对于客户端程序来说,select, WSAAysnselect,WSAEventSelect,,Overlapped I/O,都有什么各自的优势
- 可不可以将一个视图对应多个文档?
- 为什么矩形不能削影?
- 程序启动缩到右下角任务栏后如何响应鼠标
- 请教各位高手,能不能用vc实现调用98中记事本的打印命令直接打印记事本中的内容/谢谢,急
- 非模态对话框创建出错(急急急急急急急急)
- help--这是怎么一回事??
- 关于TV_INSERTSTRUCT这个结构
- 请教各位,如果修改目录的创建时间、修改时间??
Long pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary.
他必须要初始化,不然会错的。
LPSTR buf = new char[10000];
buf[0] = '\0';
要不是10000个字节的乱码
mFileDlg.m_ofn.lpstrFile的范围是_MAX_FNAME//256
多了会出错,
delete buf;//最好是delete[] buf;
{
ASSERT_VALID(this);
ASSERT(m_ofn.Flags & OFN_ENABLEHOOK);
ASSERT(m_ofn.lpfnHook != NULL); // can still be a user hook // zero out the file buffer for consistent parsing later
ASSERT(AfxIsValidAddress(m_ofn.lpstrFile, m_ofn.nMaxFile));
DWORD nOffset = lstrlen(m_ofn.lpstrFile)+1;
ASSERT(nOffset <= m_ofn.nMaxFile); // 错在这里了,如果不初始化这个nOffset就很大,因为你new了10000那么大。
... ...
}
也不必要那么大,路径最大就是MAX_PATH 260.