非常奇怪的GetOpenFileName问题
Very strange GetOpenFileName problem
我似乎有一个非常奇怪的问题与GetOpenFileName。
它没有明显的错误原因,但是,如果我在错误检查中调用CommDlgExtendedError()
,错误从一开始就不会发生。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
OPENFILENAME fm;
char flnm[MAX_PATH];
ZeroMemory(&fm, sizeof(fm));
fm.lStructSize = sizeof(OPENFILENAME);
fm.hwndOwner = NULL;
fm.lpstrFilter = "Text Files (*.txt) *.txt ";
fm.lpstrFile = flnm;
fm.nMaxFile = MAX_PATH;
fm.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
fm.lpstrDefExt = "";
if(!GetOpenFileNameA(&fm))
{
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
return 0;
}
显示什么?"失败!("
如果我删除这个检查,我确实看到一个文件对话框。但是,它不起作用,并且文件名框预先填充了随机垃圾。
如果我改成:
if(!GetOpenFileNameA(&fm))
{
DWORD dwErr = CommDlgExtendedError();
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
"失败!没有显示。文件对话框显示和执行没有问题。
发生什么事了? ? ?
OPENFILENAME fm;
char flnm[MAX_PATH]; // nobody initialized me ...
ZeroMemory(&fm, sizeof(fm));
fm.lStructSize = sizeof(OPENFILENAME);
fm.hwndOwner = NULL;
fm.lpstrFilter = "Text Files (*.txt) *.txt ";
fm.lpstrFile = flnm; // ... who knows what I am?
fm.nMaxFile = MAX_PATH;
fm.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
fm.lpstrDefExt = "";
if(!GetOpenFileNameA(&fm))
{
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
lpstrFile
的文档说明:
用于初始化"文件名"编辑控件的文件名。如果不需要初始化,这个缓冲区的第一个字符必须为NULL。当GetOpenFileName或GetSaveFileName函数成功返回时,该缓冲区包含所选文件的驱动器标识符、路径、文件名和扩展名。
您没有初始化flnm
,这就是问题所在。您可以通过在调用GetOpenFileName
之前写入flnm[0] = ' '
来解决这个问题。
相关文章:
- getopenfilename功能没有打开对话框
- QT 5.2.0 getOpenFileName slow
- QFileDialog::getOpenFileName in console application
- QFileDialog:使用 getOpenFileName 允许不存在的文件
- Windows Server 2008 R2上的常见对话框:GetOpenFileName崩溃
- GetOpenFileName 对话框和 opencv 的奇怪行为
- 使用opencv打开映像,使用QFileDialog::getOpenFileName打开Qt
- GetOpenFileName()存在问题
- QFileDialog::getOpenFileName 在 MAC 10.10.5 Yosemite 上不起作用
- 如何在使用带有multiselect标志的GetOpenFileName()时获取所选文件的列表
- 无法从OSX dylib显示OSX Finder选择文件对话框(QFileDialog::getOpenFileName
- 如何GC(删除)GetOpenFileName的线程
- 使用GetOpenFileName检索xml文件名后,tinyxml加载失败
- GetOpenFileName触发断点
- DialogBoxParam and GetOpenFileName
- 为什么 QFileDialog::getOpenFileName 不起作用?
- GetOpenFileName和系统函数调用运行时错误c++ win32 api
- QFileDialog::getOpenFileName在调试时崩溃,显然是由项目名称引起的
- 当QFileDialog::getOpenFileName窗口打开时,程序已意外结束
- 非常奇怪的GetOpenFileName问题