首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常奇怪的GetOpenFileName问题

非常奇怪的GetOpenFileName问题
EN

Stack Overflow用户
提问于 2011-09-13 02:23:43
回答 1查看 4.3K关注 0票数 0

我似乎对GetOpenFileName有一个非常奇怪的问题。

它的错误没有明显的原因,但是,如果我在错误检查中调用CommDlgExtendedError(),错误根本就不会发生。

下面是我的代码:

代码语言:javascript
复制
#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)\0*.txt\0";
    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;
}

显示了什么?“失败!:(”

如果我取消此检查,我确实会看到一个文件对话框。但是,它不起作用,并且文件名框中预先填满了随机垃圾。

如果我更改为:

代码语言:javascript
复制
if(!GetOpenFileNameA(&fm))
{
    DWORD dwErr = CommDlgExtendedError();
    MessageBoxA(NULL, "failed! :(", NULL, NULL);
}

"failed!:(“未显示。文件对话框显示并执行,没有问题。

怎么回事!?!?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-13 03:45:27

代码语言:javascript
复制
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)\0*.txt\0";
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);
}

lpstrFiledocumentation声明:

用于初始化“文件名”编辑控件的文件名。如果不需要初始化,则此缓冲区的第一个字符必须为空。当GetOpenFileName或GetSaveFileName函数成功返回时,此缓冲区包含所选文件的驱动器指示符、路径、文件名和扩展名。

您没有初始化flnm,这就是问题所在。您可以通过在调用GetOpenFileName之前编写flnm[0] = '\0'来解决此问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7392164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档