MFC 对话框打开文件失败(GetOpenFileName())
来源:互联网 发布:淘宝白菜价在哪 编辑:程序博客网 时间:2024/05/08 22:50
最近做了一个诊断的上位机(MFC),自己测试的时候没问题,但是发到客户那里打开文件对话框打开文件失败,之前的程序没做错误判断,所以看不到错误码。在公司的电脑上测试,win7,xp台式机,笔记本都试过,都没问题,让人感觉莫名其妙,于是上网寻求帮助,功夫不负有心人,终于搞定。
PRB: GetOpenFileName() 失败如果 lpstrFile 缓冲区不为空终止
症状
与 CommDlgExtendedError 的 CDERR_INITIALIZATION(0x0002),GetOpenFileName 函数将失败。
回到顶端 | 提供反馈
原因
OPENFILENAME 结构的 lpstrFile 缓冲区不为空终止。
回到顶端 | 提供反馈
解决方案
根据平台 SDK 文档中,lpstrFile 缓冲区的第一个字符必须为 NULL,如果缓冲区未使用文件名称编辑框中的初始化。
回到顶端 | 提供反馈
状态
此行为是设计使然。
回到顶端 | 提供反馈
更多信息
下面的 Win32 应用程序演示此问题:
#include <Windows.h>// If the next line is commented out, GetOpenFileName fails.//#define NULL_TERMINATEint WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR szCmdLine, int nCmdShow){ longlErrMsg = 0; OPENFILENAME ofn; TCHAR sfile[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); ZeroMemory(sfile, sizeof(TCHAR)*MAX_PATH); #ifndefNULL_TERMINATE // Not NULL terminated. { int i; for (i = 0; i < MAX_PATH; i++) sfile[i] = ' '; } #else // NULL terminated. sfile[0] = '\0'; #endif // Initialize OPENFILENAME structure. ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = NULL; ofn.lpstrFile = sfile; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = NULL; ofn.nFilterIndex = 1; ofn.lpstrTitle = TEXT("Please Select a File"); ofn.lpstrInitialDir = NULL; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; ofn.lCustData = 0; ofn.lpfnHook = 0; ofn.lpTemplateName = 0; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; // Call GetOpenFileName(). if (GetOpenFileName(&ofn)) { MessageBox(NULL, TEXT("GetOpenFileName() Successful"), TEXT("OpenDialog"), MB_OK); } else { TCHARsErrMsg[256]; lErrMsg = CommDlgExtendedError(); wsprintf(sErrMsg,TEXT("Error %d returned from GetOpenFileName()"), lErrMsg); MessageBox(NULL, sErrMsg, TEXT("OpenDialog"), MB_OK); } return lErrMsg;}
回到顶端 | 提供反馈
0 0
- MFC 对话框打开文件失败(GetOpenFileName())
- 文件打开(保存)对话框:GetOpenFileName和 GetSaveFileName
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- vba使用win32 API(GetOpenFileName )实现打开文件对话框
- Win8进入传统安全模式
- 对ajax的详细理解
- Linux的进程/线程间通信方式总结
- java中stringBuilder的用法
- c语言_十六进制字符串转成对应整型值
- MFC 对话框打开文件失败(GetOpenFileName())
- 利用GeneratedKeyHolder获得新建数据主键值
- cocos2D(八)---- CCMenu && CCMenuItem
- 电流镜中cascode效应的学习笔记
- iOS的alamofire框架的json解析方法,服务器传过来的json格式一定要是标准的格式,否则会报以下错误
- 生产者消费者线程
- 匿名内部类的作用
- 查询重复记录的SQL语句
- redhat 9 下sqlite 3的安装及编程