Когда я компилирую свою программу в режиме отладки, 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");
^
нет.
EDIT: попытался воспроизвести ту же ошибку в свежем проекте Visual Studio, но я не смог. Оно работает. Сделал различия в настройках проекта, и нет никаких различий между мэрами.