| VENOMOUS SNAKE |
20.10.2005 15:11 |
Глюки с GetOpenFileName
Необходимо вызвать стандартноый диалог открытия файла. Всё, что нужно для этого, как я понял, это: функция GetOpenFileName(LPOPENFILENAME) и структура OPENFILENAME. Вроде бы всё просто. Вот этод код я выдрал из хелпа "Win32 Programmer's Reference":
Код:
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "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);
Как я понимаю, это простенький пример открытия файла. Вот только компилер мой с ним не справляется (среда MS Visual Studio .NET). При сборке приложения ни предупреждений, ни ошибок не обнаруживается, но код полностью не выполняется. Выполнение прерывается выходом из функции на строке "ofn.nFilterIndex = 1;". При этом никаких исключений не происходит. Я немного поэкспериментировал, вот результаты. Если закоментировать вызов функции GetOpenFileName(&ofn) (разумеется вместе с условием), то компилятор начинает выдавать ошибку "Local function definations are illegal" и указывает на имя следующей по тексту функции, т.е. намекает, что эта функция была определена внутри текущей, что недопустимо. Замечу, все скобки на месте, синтаксических ошибок нет, просто коментируется условие. Потом выяснилось, что такой результат можно молучить, если закоментировать любую другую строку. Если удалить вызов GetOpenFileName (не коментировать, а удалить), то компилер работает нормально. Если кто знает, в чём дело, пожалуйста, помогите. Если можно, дайте кусочек своего рабочего кода, у кого есть. Заранее спасибо.
|