Разработка Win32 приложений. Инструментальные средства изучения системы

Разработка Win32 приложений. Инструментальные средства изучения системы

Уже отмечалось, что в ОС Windows между приложением и совокупностью системных вызовов ( системных сервисов в терминологии Microsoft) расположен дополнительный абстрактный слой - программный интерфейс Win32 API . За счет этого Win32- приложение может работать практически во всех версиях Windows (см. рис. 1.5), несмотря на то, что сами системные вызовы в различных версиях системы различны и не документированы.

Исчерпывающая информация по программному интерфейсу Win32 API содержится в справочной документации на Win32 API . Эту документацию можно просмотреть на сайте http://msdn.microsoft.com или на компакт-дисках MSDN (Microsoft Developer Network Library ). MSDN является программой технической поддержки разработчиков.

Win32 API предоставляет всеобъемлющий интерфейс , позволяющий выполнить каждое действие несколькими способами и покрывающий все области, с которыми должна работать операционная система . Естественно, что этот интерфейс содержит вызовы для создания и управления процессов и потоков, управления файловым вводом-выводом , операций с окнами и графикой, безопасностью и т.д.

Если заглянуть в раздел MSDN \Platform SDK\ Win32\ Overview of the Win32 API , то можно увидеть, что Win32 API подразделяются на следующие группы.

  • Base Services - базовые сервисы отвечают за обеспечение доступа к ресурсам компьютера и интерфейс для работы с памятью, файлами, устройствами , процессами и потоками.
  • Common Control Library - библиотека общих элементов управления для разработки оконных интерфейсов .
  • Graphics Device Interface - вывод графики на дисплей и другие устройства.
  • Network Services - сетевые сервисы.
  • User Interface - интерфейс пользователя.
  • Windows Shell - функции для работы с оболочкой.
  • Windows System Information - информация о конфигурации системы Windows.

В рамках данного курса нам потребуются главным образом функции, относящиеся к первому пункту списка и описанные в MSDN разделе \Platform SDK\Base Services , а также функции, описанные в разделе \Platform SDK\ Security .

Компилятор Visual C++ и среда программирования для Windows

Предполагается, что читатель знаком с типичными приложениями Windows , такими, как Проводник ( Windows Explorer), ориентируется в файловой системе компьютера и в состоянии найти любой файл , записанный на жестком диске.

Компилятор Windows Visual C++ удобно объединять со справочной системой MSDN Library , которая при этом вызывается через пункт меню "Справка" (" Help ") в интегрированной среде Microsoft Visual C++, а также может использоваться автономно. Запуск установленной графической оболочки Microsoft Visual C++ осуществляется стандартными средствами системы.

Чтобы из текста программы на языке высокого уровня ( файл с расширением "c" или "cpp") получить исполняемую программу в машинных кодах ( файл с расширением "exe"), необходимо в графической оболочке Microsoft Visual Studio C++ создать рабочий проект, который представляет собой совокупность служебных файлов, необходимых для дальнейшей работы.

Программные примеры, иллюстрирующие данный курс, представляют собой Windows -приложения с текстовым интерфейсом (консольные). Разработка приложений с дружественным графическим интерфейсом сама по себе достаточно сложна и должна изучаться в рамках специальных учебных курсов. Поэтому, формируя проект, далее в графической оболочке Visual Studio в диалоговом окне " New " нужно выбрать Win32 Console Application в качестве типа приложения, а также дать проекту имя, указать каталог расположения файлов проекта и нажать кнопку "OK".

Затем при помощи пунктов меню и всплывающих окон графической оболочки нужно включить в проект файлы, содержащие программу, или ввести программу с клавиатуры с последующим ее сохранением в одном из файлов проекта. Через пункт меню " Build " можно выполнить компиляцию программы, создать исполняемый модуль , запустить программу на счет и, при необходимости, выполнить ее отладку. Существует большое количество разнообразных руководств по использованию Microsoft Visual Studio C++.

Прогон программы "Hello, world"

В качестве самостоятельного упражнения рекомендуется реализовать простейшую программу в интегрированной среде компилятора Visual C++, например, хрестоматийную программу "Hello, world", и ознакомиться со средствами разработки, отладки и контекстной помощи.

Типы данных, используемые в Win32-приложениях

Мобильность программ и их независимость от конкретной платформы во многом обеспечивается введением новых стандартных типов данных - определенных на основе простых типов языка программирования Си . Имена стандартных типов данных состоят из символов верхнего регистра, для них не применяется оператор "*".

Полный перечень используемых данных можно увидеть в разделе \Plarform SDK \Win32 API\ Reference \ Data Types . Ниже приведен список наиболее распространенных типов: симовольных, целых, булевских, указателей и описателей (handles). Символьные, целые и булевские типы соответствуют аналогичным типам большинства диалектов языка Си . Имена типов-указателей содержат префикс "P" или "LP". Описатели имеют отношение к ресурсам, загруженным в память .

Наиболее часто используются следующие типы данных:

  • BOOL - булевская переменная ( TRUE или FALSE );
  • CHAR - 8- разрядный символ;
  • DWORD - 32-разрядное беззнаковое целое;
  • HANDLE - описатель объекта;
  • INT - 32-разрядное целое;
  • LPSTR - указатель на строку 8-разрядных символов, заканчивающуюся нулем;
  • LPTSTR - LPWSTR в случае Unicode или LPSTR в случае ANSI;
  • LPVOID - указатель на любой тип;
  • LPWSTR - указатель на строку 16-разрядных (Unicode) символов, заканчивающуюся нулем;
  • TCHAR - WCHAR , в случае Unicode или CHAR в случае ANSI;
  • WCHAR - 16-разрядный Unicode символ;
  • WORD - 16-разрядное беззнаковое целое.

Остальные типы данных будут изучаться по мере необходимости. Некоторые Win32 приложения могут быть выполнены в среде более ранних версий ОС Windows , в том числе и 16-разрядных. Вследствие этого имена некоторых типов отражают систему адресации ОС MS-DOS , например, LP ( long pointer ) означает "длинный" указатель , а на самом деле - это обычный указатель .

В качестве самостоятельного упражнения рекомендуется ознакомиться с данными различных типов в справочной системе MSDN .

Unicode

В ОС Windows в качестве внутреннего формата для хранения и обработки текстовых строк используется Unicode. В Unicode каждый символ представляется 16-битным (двухбайтовым) кодом, что позволяет поддерживать разные языки и системы письменности (такие, как китайские и японские иероглифы).

Стандарт Unicode поддерживается консорциумом, в который входят такие компании, как Apple, Compaq, Hewlett-Packard, IBM , Microsoft и многие другие; подробная информация об этом имеется на сайте http://www.unicode.org. В справочнике MSDN соответствующие сведения хранятся в разделе \Visual Studio documentation\ Visual C++ Programmer's Guide \ Adding Program Functionality \ Overviews \ Unicode Programming .

Для совместимости со стандартами языков программирования и предыдущими версиями Windows в системе наряду с 16-битными (двухбайтовыми) символами активно используются и 8-битные (однобайтовые) ANSI символы. Так, многие Win32-функции , принимающие строковые параметры, существуют в двух версиях: для Unicode и для ANSI . Обычно при вызове ANSI -версии Win32-функции входные строковые параметры перед обработкой системой преобразуются в Unicode. В связи с этим перед разработчиками стоит задача написания приложений, способных работать с обеими кодировками.

📎📎📎📎📎📎📎📎📎📎