プログラムをデバッグ モードでコンパイルすると、GetOpenFileName(&ofn)
戻りません。
リリースモードでは問題なく動作します。私が見つけた唯一の違いは、多くのことがリリース モードで最適化されていることです。
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
szFile[0] = '\0';
szFile[1] = '\0';
//Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFilter = TEXT("Images (*.jpg;*.png;*.bmp;*.tga;*.psd)\0*.jpg;*.png;*.bmp;*.tga;*.psd\0\0");
ofn.lpstrInitialDir = TEXT(".");
ofn.lpstrTitle = TEXT("Open 512x512 image");
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
...
GetOpenFileName(&ofn)
Unicode 文字セットを使用してコンパイルしています。
\0
途中から削除するofn.lpstrFilter
と、デバッグモードで機能しますが、明らかにフィルターが正しく機能しません。
\0
これは、スポット周辺のデバッグ モードとリリース モードの両方で、メモリ内の文字列がどのように見えるかです。
...snip...
0x00364BB4 70 00 p.
0x00364BB6 73 00 s.
0x00364BB8 64 00 d.
0x00364BBA 29 00 ).
0x00364BBC 00 00 ..
0x00364BBE 2e 00 ..
0x00364BC0 6a 00 j.
0x00364BC2 70 00 p.
0x00364BC4 67 00 g.
0x00364BC6 3b 00 ;.
...snip...
私はおそらくばかげたことをしているのでしょう (winapi /w Unicode の経験はあまりありません) が、何が原因かわかりません。何か案は?
編集: 現在のコードで更新されました。
基本的
ofn.lpstrFilter = TEXT("Images (*.jpg;*.png;*.bmp;*.tga;*.psd)*.jpg;*.png;*.bmp;*.tga;*.psd\0");
^
動作しますが、
ofn.lpstrFilter = TEXT("Images (*.jpg;*.png;*.bmp;*.tga;*.psd)\0*.jpg;*.png;*.bmp;*.tga;*.psd\0");
^
しません。
編集:新しいVisual Studioプロジェクトで同じエラーを再現しようとしましたが、できませんでした。できます。プロジェクト設定の差分を作成しましたが、市長の違いはありません。