IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Глюки с GetOpenFileName (http://www.imho.ws/showthread.php?t=94493)

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 (не коментировать, а удалить), то компилер работает нормально. Если кто знает, в чём дело, пожалуйста, помогите. Если можно, дайте кусочек своего рабочего кода, у кого есть. Заранее спасибо.

topknot 20.10.2005 21:07

В хелпе врядли могут быть неработающие куски программ, которые, к тому же, миллионы раз были проверены людьми вырезвашими оттуда кусочки. Можно порекомендовать - зайти/выйти, перекомпилировать весь проект полностью, удалить временные и подозрительные файлы ручками, проверить нет ли неправильных (lf only) окончаний строк (в этом случае, если смешаны lf & lf+cr окончания, редактор вижуал студии может неправильно определять где какая строка находится)...

VENOMOUS SNAKE 21.10.2005 02:52

Да, через полчасика исследований я просёк фишку. В тексте winhelp используется очень интересный формат. Кусок кода я бессовестно скопировал, вот мой вижуал и нахватался всяких неуклюжих символов конца строки. Всё равно, спасибо, что не оставил без внимания.

тема закрыта


Часовой пояс GMT +4, время: 16:30.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.