使用GetOpenFileName 笔记
来源:互联网 发布:哪些端口不是敏感端口 编辑:程序博客网 时间:2024/04/26 11:40
今天使用GetOpenFileName时在Release下没问题,在debug下莫名奇妙的失败,调用CommDlgExtendedError得到返回值为CDERR_INITIALIZATION,在网上找到原因如下:
摘自http://www.kbalertz.com/222003/Fails.lpstrFile.Buffer.Terminated.aspx
PRB: GetOpenFileName() Fails If lpstrFile Buffer Is Not NULL Terminated
SYMPTOMS
Back to the top
CAUSE
Back to the top
RESOLUTION
Back to the top
STATUS
Back to the top
MORE INFORMATION
#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;}
用VC编译时会报连接出错,需要手动加入LIB\COMDLG32.LIB才行,如果要默认过滤文件的话可以使用以下例子:
#include <Windows.h>
// If the next line is commented out, GetOpenFileName fails.//#define NULL_TERMINATE
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR szCmdLine, int nCmdShow){
OPENFILENAME ofn; TCHAR sfile[MAX_PATH]; long lErrMsg; ZeroMemory(&ofn, sizeof(ofn));
ZeroMemory(sfile, sizeof(TCHAR)*MAX_PATH);
#ifndef NULL_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.lpstrFile = sfile; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile[0] = TEXT('\0'); ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0"); ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;
// Call GetOpenFileName(). if (GetOpenFileName(&ofn)) { MessageBox(NULL, sfile, TEXT("OpenDialog"), MB_OK); } else { TCHAR sErrMsg[256]; lErrMsg = CommDlgExtendedError(); wsprintf(sErrMsg,TEXT("Error %d returned from GetOpenFileName()"), lErrMsg); MessageBox(NULL, sErrMsg, TEXT("OpenDialog"), MB_OK); }
return lErrMsg;}
- 使用GetOpenFileName 笔记
- 使用GetOpenFileName 选择文件夹
- GetOpenFileName
- GetOpenFileName的简单使用实例
- Qt getOpenFileName函数使用详解
- Qt之QFileDialog::getOpenFileName() 使用
- 使用GetOpenFileName创建“选择文件”对话框
- Qt学习--- QFileDialog::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 )实现打开文件对话框
- 基于OpenCV双边滤波器的人脸美化 .
- 分组头的管理[转载]
- Java中Could not find the main class.program will exit和java.lang.UnsupportedClassVersionError 的解决方法
- 向NS2中添加协议PING[转载]
- 数据库空值处理
- 使用GetOpenFileName 笔记
- 第十二次上机
- Xcode快捷键,史上最全!
- 关于Transparent Hugepage
- 彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释
- struts2源码阅读2
- 家乡的大樱桃
- Python上下文管理器(context manager)一例
- URLConnection和HTTPClient的比较