我想使用GetOpenFileNameA打开一个对话框。但是,该对话框不会打开。相反,我得到一个很好的CommDlgError 2.搜索谷歌和StackOverflow的这个错误没有产生任何有用的结果。调用GetOpenFileNameA会导致常见的对话框错误2
令人困惑的是,此代码适用于也使用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和LPOPENFILENAMEA蒙上只告诉你,你没有错,它并没有从这样做是错误阻止你停止编译器。如果你真的*不关心本地化,那就用OPENFILENAMEA代替。并删除演员。 –
您正在调用具有为Unicode版本设置的结构的函数的ANSI版本。你为什么期望**不会失败? –
@HansPassant:感谢您的输入。 – moonman239