我想使用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