Программирование на языке высокого уровня. Марапулец Ю.В. - 170 стр.

UptoLike

Составители: 

Перед изучением технологии использования шаблонов для создания Windows-
приложений, необходимо рассмотреть принципы работы операционной системы Win-
dows и ее взаимодействия с прикладными программами.
Благодаря
интерфейсу вызова функций в Windows доступ к системным ресурсам
осуществляется через целый ряд системных функций. Совокупность таких функций на-
зывается прикладным программным интерфейсом, или API (Application Programming In-
terface). Для взаимодействия с Windows приложение запрашивает функции API, с помо-
щью которых реализуются все необходимые системные действия, такие как выделение
памяти, вывод на экран, создание окон и т.п.
Поскольку API состоит из большого числа функций, может сложиться впечатле-
ние, что при компиляции каждой программы, написанной для Windows, к ней подклю-
чается код довольно значительного объема. В действительности это не так. Функции API
содержатся в
библиотеках динамической загрузки (Dynamic Link Libraries, или DLL),
которые загружаются в память только в тот момент, когда к ним происходит обращение,
т.е. при выполнении программы. Динамическая загрузка обеспечивает ряд существен-
ных преимуществ.
Во-первых, поскольку практически все программы используют API-функции, то
благодаря DLL-библиотекам существенно экономится дисковое пространство, которое в
противном случае занималось бы большим количеством повторяющегося кода, содер-
жащегося в каждом из исполняемых файлов.
Во-вторых, изменения и улучшения в Windows-приложениях сводятся к обновле-
нию только содержимого DLL-библиотек. Уже существующие тексты программ не тре-
буют перекомпиляции.
В настоящее время наибольшее распространение получила версия API, которая по-
лучила название Win32. Данная версия API пришла на смену версии Win16, используе-
мой в Windows 3.1. Фактически 32-разрядная Win32, используемая в операционных сис-
темах линейки 9x, является надмножеством для Win16 (т.е. фактически включает в себя
этот интерфейс), так как большинство функций имеет то же название и применяется
аналогичным образом. Однако, будучи в принципе похожими, оба интерфейса все же
отличаются друг от друга. Win32 поддерживает 32-разрядную линейную адресацию, то-
гда как Win16 работает только с 16-разрядной сегментированной моделью памяти. Это
привело к тому, что некоторые функции были модифицированы таким образом, чтобы
принимать 32-разрядные аргументы и возвращать 32-разрядные значения. Часть из них
пришлось изменить с учетом 32-разрядной архитектуры. Была реализована поддержка
потоковой многозадачности, новых элементов интерфейса и прочих нововведений Win-
dows 9x. Win32 операционной системы линейки NT уже полностью 32-разрядная и су-
щественно отличается от Win32 Windows 9x.
Так как Win32 поддерживает полностью 32-разрядную адресацию, то логично, что
целые типы данных (integers) также объявлены 32-разрядными. Это означает, что пере-
менные типа int и unsigned будут иметь длину 32 бита, а не 16, как в Windows 3.1 или
DOS. Если же необходимо использовать переменную или константу длиной 16 бит, они
должны быть объявлены как short (далее будет показано, что для этих типов определены
независимые typedef-имена.). Следовательно, при переносе программного кода из 16-
разрядной среды необходимо убедиться в правильности использования целочисленных
элементов, которые автоматически будут расширены до 32 битов, что может привести к
появлению побочных эффектов.
Другим следствием 32-разрядной адресации является то, что указатели больше не
нужно объявлять как near и far. Любой указатель может получить доступ к любому уча-
стку памяти. В современных ОС Windows константы near и far объявлены (с помощью
директивы #define) пустыми.
Одним из подмножеств API является GDI (Graphics Device Interface – интерфейс
графического устройства). GDI – это та часть Windows, которая обеспечивает поддержку
170
      Перед изучением технологии использования шаблонов для создания Windows-
приложений, необходимо рассмотреть принципы работы операционной системы Win-
dows и ее взаимодействия с прикладными программами.
      Благодаря интерфейсу вызова функций в Windows доступ к системным ресурсам
осуществляется через целый ряд системных функций. Совокупность таких функций на-
зывается прикладным программным интерфейсом, или API (Application Programming In-
terface). Для взаимодействия с Windows приложение запрашивает функции API, с помо-
щью которых реализуются все необходимые системные действия, такие как выделение
памяти, вывод на экран, создание окон и т.п.
      Поскольку API состоит из большого числа функций, может сложиться впечатле-
ние, что при компиляции каждой программы, написанной для Windows, к ней подклю-
чается код довольно значительного объема. В действительности это не так. Функции API
содержатся в библиотеках динамической загрузки (Dynamic Link Libraries, или DLL),
которые загружаются в память только в тот момент, когда к ним происходит обращение,
т.е. при выполнении программы. Динамическая загрузка обеспечивает ряд существен-
ных преимуществ.
      Во-первых, поскольку практически все программы используют API-функции, то
благодаря DLL-библиотекам существенно экономится дисковое пространство, которое в
противном случае занималось бы большим количеством повторяющегося кода, содер-
жащегося в каждом из исполняемых файлов.
      Во-вторых, изменения и улучшения в Windows-приложениях сводятся к обновле-
нию только содержимого DLL-библиотек. Уже существующие тексты программ не тре-
буют перекомпиляции.
      В настоящее время наибольшее распространение получила версия API, которая по-
лучила название Win32. Данная версия API пришла на смену версии Win16, используе-
мой в Windows 3.1. Фактически 32-разрядная Win32, используемая в операционных сис-
темах линейки 9x, является надмножеством для Win16 (т.е. фактически включает в себя
этот интерфейс), так как большинство функций имеет то же название и применяется
аналогичным образом. Однако, будучи в принципе похожими, оба интерфейса все же
отличаются друг от друга. Win32 поддерживает 32-разрядную линейную адресацию, то-
гда как Win16 работает только с 16-разрядной сегментированной моделью памяти. Это
привело к тому, что некоторые функции были модифицированы таким образом, чтобы
принимать 32-разрядные аргументы и возвращать 32-разрядные значения. Часть из них
пришлось изменить с учетом 32-разрядной архитектуры. Была реализована поддержка
потоковой многозадачности, новых элементов интерфейса и прочих нововведений Win-
dows 9x. Win32 операционной системы линейки NT уже полностью 32-разрядная и су-
щественно отличается от Win32 Windows 9x.
      Так как Win32 поддерживает полностью 32-разрядную адресацию, то логично, что
целые типы данных (integers) также объявлены 32-разрядными. Это означает, что пере-
менные типа int и unsigned будут иметь длину 32 бита, а не 16, как в Windows 3.1 или
DOS. Если же необходимо использовать переменную или константу длиной 16 бит, они
должны быть объявлены как short (далее будет показано, что для этих типов определены
независимые typedef-имена.). Следовательно, при переносе программного кода из 16-
разрядной среды необходимо убедиться в правильности использования целочисленных
элементов, которые автоматически будут расширены до 32 битов, что может привести к
появлению побочных эффектов.
      Другим следствием 32-разрядной адресации является то, что указатели больше не
нужно объявлять как near и far. Любой указатель может получить доступ к любому уча-
стку памяти. В современных ОС Windows константы near и far объявлены (с помощью
директивы #define) пустыми.
      Одним из подмножеств API является GDI (Graphics Device Interface – интерфейс
графического устройства). GDI – это та часть Windows, которая обеспечивает поддержку

                                        170