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;
}
何? 「失敗した!:(」
私は、このチェックを外した場合、私はしかし、それは動作しません。ファイルダイアログを参照してくださいか、ファイル名ボックスはランダムなジャンクで予め充填されている。
私が変更した場合To:
if(!GetOpenFileNameA(&fm))
{
DWORD dwErr = CommDlgExtendedError();
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
"!:(失敗" ファイルダイアログ番組を示しておらず、問題なく実行
で何が起こっているのか
私はあなたのコードを見ていませんが、メモリレイアウトを変更するとバグが修正されます。これは通常、悪いポインタやオーバーランのようなバグを意味します。 – atk
これはおそらく 'fm'がジャンクで埋め込まれているためです。 – AJG85
あなたはこれをより良い質問に編集しているようには見えないので、答えの代わりに大きなヒントを与えるつもりです: 'fm.lpstrFile'はnullで終わらなければなりません。 – AJG85