Skip to content

Примеры для курса "Программирование в Windows"

License

Notifications You must be signed in to change notification settings

maltsevda/WinProg

Repository files navigation

Примеры для курса "Программирование в Windows"

Репозиторий с примерами для курса лекций "Программирование в ОС Windows". Без посещения занятий полезность у него невысокая, но даже так это лучше чем ничего. Если вы пропустили занятие и товарищи не хотят с вами делиться своими работами (или у вас нет товарищей), то выбираем нужный пример и начинаем работать с ним. Примеры подходят как основа для разработки первой и второй лабораторных работ.

Некоторые лекции выложены на YouTube.

Перечень примеров:

  • 000_Tools - Инструменты (с исходным кодом).
    • DllExportViewer - Выводит список всех экспортируемых функций для DLL.
    • HelpDownloader.py - Загрузчик справки с сайта Microsoft's Old API Help File Reborn
  • 010_HelloWorld - Простейшее оконное приложение для Windows.
  • 011_ErrorGDI - Пример неправильной работы приложения, если не освобождать ресурсы GDI.
  • 020_HelloWorldEx - Оконное приложение в котором есть окна сообщений, меню и другие элементы Windows.
  • 025_DlgSample - Диалоговые окна: модальные, общего назначения и немодальные.
  • 030_DLL_OLD - Пример работы с динамически загружаемыми библиотеками, с явной и неявной загрузкой. Устаревший пример.
  • 031_DllSample - Пример работы с динамически загружаемыми библиотеками, с явной и неявной загрузкой.
  • 031_DllSample_VS2019 - Пример работы с динамически загружаемыми библиотеками, с явной и неявной загрузкой. Вариант для Visual Studio 2019.
  • 040_Hook и 041_HookSample - Пример клавиатурного хука.
  • 050_ThreadsBase и 051_ThreadSample - Основа, на базе которой мы будем рассматривать работу с потоками. 3 потока, реализующие различные алгоритмы сортировки.
  • 060_ThreadsConfirmError - Пример неправильной работы потоков при отсутствии синхронизации между ними.
  • 070_ThreadsWithMutex и 071_MutexSample - Синхронизация потоков при помощи мьютексов.
  • 080_Semaphore - Синхронизация потоков при помощи семафора, реализация очереди.
  • 090_MMF - Пример работы с Memory Mapped Files. Передача данных между двумя различными процессами.

Подготовка рабочего места

  1. Установить Visual Studio Community: ссылка на скачивание. Ключевые моменты установки:

    • Вкладка "Рабочие нагрузки" (Workloads) - чекаем "Разработка классических приложений на С++" (Desktop development with C++).
    • Вкладка "Отдельные компоненты" (Individual Components) - чекаем "Инструменты Visual C++ для CMake" (Visual C++ tools for CMake)
    • Вкладка "Языковые пакеты" (Language packs) - оставить только английский.
    • Остальное по желанию, в любой момент установленные компоненты можно изменить.

    Вам понадобится зарегистрировать студию, это бесплатно и требует только аккаунта в Microsoft. Если вы пропустили этот этап, то в правом верхнем углу есть специальная кнопочка для этого: VS Login

  2. Установить последнюю версию CMake: ссылка на скачивание. Я рекомендую использовать версии из раздела "Latest Release", а не "Release Candidate".

  3. Можно установить Visual Studio Code: ссылка на скачивание. Этот редактор "легче" Visual Studio IDE, в некоторых моментах он удобнее. Для работы понадобятся следующие расширения:

  4. Можно установить любой GIT-клиент, будет проще получать и узнавать об обновлениях в репозитории. Если сами не определились с подходящим вам вариантом, то советую обратить внимание на следующие клиенты:

    • Официальный клиент GIT, хорошо интегрируется в ОС. GUI клиент у него корявый, поэтому у меня он установлен для работы через командную строку и через него работают другие GUI клиенты.
    • Sourcetree бесплатный и удобный GUI клиент, в работе я использую его. Он может работать как со встроенным GIT клиентом, так и с системным (мой вариант).
    • GitHub Desktop еще один хороший клиент для работы с репозиториями располагающимися на сайте github.com.

Пункты 3 и 4 необязательны, но могут существенно упростить вам жизнь.

Скачивание примеров к себе на компьютер

  1. Самый простой способ, скачать zip-архив с примерами напрямую с сайта:

    Download

    Затем распаковать в нужную папку и можно приступать к работе.

  2. Клонировать репозиторий через GUI клиент для GIT. Для этого понадобится URL репозитория, на картинке выше он записан в текстовом поле. Выбираете в своем клиенте клонирование репозитория (в Sourcetree это File -> Clone/New...). Вставляете URL, выбираете папку куда клонировать и немного ждете. Прелесть такого способа в том, что клиент будет сообщать об обновлениях в репозитории, которые можно будет спулить к себе.

  3. Клонировать репозиторий через командную строку.

    cd Work
    git clone https://github.com/maltsevda/WinProg.git
    

    В папке Work появится папка WinProg в которой и будут лежать все примеры. Естественно папка Work должна существовать. Обновить содержимое репозитория на вашем компьютере можно так:

    cd Work\WinProg
    git pull
    

Начало работы и сборка примеров

Работать с примерами можно тремя способами:

  • генерировать проекты для Visual Studio через CMake,
  • открывать примеры непосредственно в Visual Studio,
  • открывать и собирать примеры в Visual Studio Code.

Все зависит только от ваших предпочтений.

Вариант 1. Генерируем проекты через CMake.

CMake

  1. Выбираем папку с примером, в ней обязательно должен быть файл CMakeLists.txt
  2. Выбираем папку, куда будут созданы файлы проекта. В моем случае, подпапка Build
  3. Этап конфигурации. На этом шаге CMake может спросить какую систему надо использовать для сборки. В моем случае это Visual Studio 15 2017 и ставлю галочку на Use default native compilers.
  4. Генерируем файлы проекта. Все, теперь пример можно открывать в студии.
  5. Сделать это можно или через сам CMake или через любой файловый менеджер (тот же Проводник).

Вариант 2. Открываем пример сразу в Visual Studio

  1. Проверяем в инсталлере, что стоит компонент "Инструменты Visual C++ для CMake"
  2. В меню выбираем File -> Open -> CMake...
  3. Входим в папку с примером и выбираем файл CMakeLists.txt
  4. Ждем, пока студия готовит проект. По окончанию работы в Output будет выведено: 1> Target info extraction done.
  5. В меню, выбираем текущий запускаемый проект:

CMakeInVS

  1. Все, можно собирать и запускать проект как обычно.

Хочу сразу отметить, что это способ не самый надежный. Майки все еще допиливают интеграцию. Иногда все может слететь по совсем непонятным причинам. Просто закрываем студию, чистим папку с примером от мусора, перегружаем комп (иногда без этого никак) и повторяем все действия по открытию примера заново.

Вариант 3. Редактируем и открываем пример в Visual Studio Code

  1. При установке расширений и при первом открытии проекта редактору может понадобиться подгрузить и инициализировать некоторые файлы. Дайте ему время, не спешите. Перезагрузите редактор, если он вас об этом попросит. При повторном открытии все будет быстрее.
  2. Выбираем File -> Open Folder... и открываем папку с нужным примером.
  3. Редактор спросит про систему для сборки проекта Select Kit. Выбираем Visual Studio Comunity, ну а x86 или amd64 по вкусу.
  4. Управление проектом будет внизу, в статусной строке:

CMakeInVSCode

  1. Зачастую достаточно сменить только кодировку у файла (Reopen with Encoding) и запустить сборку. Если редактор о чем-нибудь попросит, то разрешайте. Плохого он не посоветует.
  2. После сборки жмякаем по жучку и запускаем пример. В первый раз он может спросить, что именно запускаем. Но в большинстве примеров выбор единственный. Все.

Работа в VSCode очень приятная, особенно, если его настроить под себя. IntelliSense отрабатывает быстрее чем в студии. Есть один маленький недостаток - редактор ресурсов, его нет. Так как *.rc файлы - это обычные текстовые файлы, то можно их править вручную. Я, например, так и делаю. Но если нужны какие-то серьезные правки, то воспользуйтесь или студией или сторонними редакторами. Я пользуюсь ResEdit, только будьте предельно осторожны, в одной из версий был вирус. Обязательно проверяйте перед установкой!

Вариант 4. Самостоятельное создание файлов проекта

  1. Запускаем студию.
  2. Создаем пустой Win32 проект.
  3. Копируем нужные файлы из примера, обычно это все файлы кроме CMakeLists.txt и CMakeSettings.json.
  4. Собираем и запускаем.

Советы

Хочу отметить, что изучение чужого кода и использование его в своих проектах не запрещено. Но вот за бездумный копипаст кода, я на практических занятиях буду карать сурово.

Если у вас возникли проблемы со сборкой примеров, нашли ошибки или есть предложения по улучшению примеров, есть сомнения в коде примеров. Пишите, не стесняйтесь. Активные студенты получают бонус при сдаче лабораторных работ и экзамена.