gpt4 book ai didi

c++ - 调用 GetOpenFileNameA 导致常见对话框错误 2

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:54 25 4
gpt4 key购买 nike

我正在尝试使用 GetOpenFileNameA 打开一个对话框。但是,对话框不会打开。相反,我得到了一个不错的 CommDlgError 2。在 Google 和 StackOverflow 上搜索这个错误没有产生任何有用的结果。

令人困惑的是,这段代码在也使用 Visual Studio 的学校计算机上运行,​​尽管版本不同。

注意:所有未在此代码块中声明的变量都是“全局”变量,只能在主代码模块中访问。

void GetInputFile()
{
char szFileNameIN[MAX_PATH];
char szFileNameOUT[MAX_PATH];

// get the input file name
OPENFILENAME ofn;
ZeroMemory(&fInputPath, sizeof(fInputPath));
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = LPWSTR("Any File\0*.*\0");
ofn.lpstrFile = LPWSTR(fInputPath);
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = LPWSTR(szFileNameIN);
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrTitle = LPWSTR("Select an input File");
ofn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST;
if (GetOpenFileNameA(LPOPENFILENAMEA(&ofn))) // user selected an input file
{
}
else {
// Get error
TCHAR error[MAX_LOADSTRING];
wsprintf(error,TEXT("%i"),CommDlgExtendedError());
MessageBox(NULL,error,TEXT("ERROR"),MB_OK);
}

}

最佳答案

那些糟糕的 (LPWSTR) 强制转换告诉我您正在使用定义的 UNICODE 进行编译,因此您使用的 OPENFILENAME 结构实际上是 OPENFILENAMEW;鉴于您正在使用 GetOpenFileNameA,您必须使用 OPENFILENAMEA(或直接使用带有宽字符串的 GetOpenFileName)。

(请记住,根据经验,如果您必须将指针转换为不同于 void * 的任何内容或类似内容,您可能做错了什么;添加指针转换只会使编译器静音,而不是让错误消失)

关于c++ - 调用 GetOpenFileNameA 导致常见对话框错误 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40538335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com