0
我似乎與GetOpenFileName有一個非常奇怪的問題。非常奇怪的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)\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;
}
什麼顯示? 「失敗了!:(」
如果我刪除此檢查,我看到一個文件對話框,但它不工作,且文件名框中預填充隨機垃圾。
如果我改變至:
if(!GetOpenFileNameA(&fm))
{
DWORD dwErr = CommDlgExtendedError();
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
「!失敗了:(」 沒有顯示文件對話框並顯示沒有問題,執行
這是怎麼回事
我沒有看過你的代碼,但是當改變內存佈局修正錯誤時,通常意味着錯誤指針或超出限制的錯誤 – atk
這可能是因爲'fm'填充了垃圾。 – AJG85
由於您似乎沒有將此編輯爲更好的問題,因此我將給您一個大提示,而不是回答:'fm.lpstrFile'必須爲空。 – AJG85