GetOpenFileName запускает точку останова - PullRequest
0 голосов
/ 21 января 2012

Я пытаюсь вызвать GetOpenFileName следующим образом:

int main(int argc, char* argv[])
{

OPENFILENAME ofn;       // common dialog box structure
wchar_t szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
wchar_t title[500];  // to hold title
GetConsoleTitle( title, 500 );
HWND hwndConsole = FindWindow( NULL, title );
ofn.hwndOwner = hwndConsole;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, 
                    GENERIC_READ,
                    0,
                    (LPSECURITY_ATTRIBUTES) NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    (HANDLE) NULL);

Прога останавливается (сообщение: example.exe сработала точку останова (не та, которую я поместил)) на "if (GetOpenFileName (& ofn)== ИСТИНА) "Когда я ломаюсь, я получаю сообщение, что источник недоступен.Если я не сломаюсь и просто нажму «Продолжить», появится диалоговое окно и будет работать как положено.Что я делаю неправильно?Я просто заметил, что в режиме релиза он работает без проблем ...

1 Ответ

1 голос
/ 21 января 2012

Одна возможная проблема: ofn.nMaxFile должно быть количеством символов, а не размером в байтах буфера. Попробуйте вместо этого:

ofn.nMaxFile = sizeof(szFile) / sizeof(wchar_t);
...