Программный интерфейс

Взаимодействие между пользовательским приложением и исполнительной средой осуществляется посредством вызовов функций ОС (в MS-DOS - посредством вызова прерывания ОС), называемых API-функциями (Application Program Interface, т.е. интерфейс программного приложения). Их количество в Windows достигает двух тысяч. Программа в значительной степени состоит из таких вызовов. Все взаимодействие с внешними устройствами и ресурсами операционной системы будет происходить посредством таких функций. Информацию об API-функциях можно извлечь из раздела "Win32 and COM Development->Development Guides->Windows API->Windows API Reference" [4].

Например, в описании функции RegisterClassEx сказано, что данная функция предназначена для регистрации класса окна, используемого в последствии в вызовах функций CreateWindow или CreateWindowEx. В качестве параметра, функции RegisterClassEx передается указатель на структуру данных типа WNDCLASSEX, которая должна быть заполнена начальными значениями перед вызовом данной функции. При успешном выполнении данной функции, она возвращает слово, которое является идентификатором зарегистрированного класса окна (это слово может быть потом использовано при создании окна с помощью функции CreateWindow или CreateWindowEx). Однако, можно возвращаемое с помощью функции RegisterClassEx слово и не использовать, а вместо него пользоваться указателем на строку символов, зарегистрированную как имя класса окна с помощью функции RegisterClassEx. В примечании же сказано, что функция RegisterClassEx имеет 2 разновидности: RegisterClassExA и RegisterClassExW. Первая функция (RegisterClassExA) сообщает системе что окно созданного класса будет использовать символы в кодировке ANSI, а вторая (RegisterClassExW) - символы в кодировке Unicode.

Описание API-функций в справочнике, ориентировано на использование языков С/C++, при этом широко используются введенные Microsoft логические типы данных. Однако API-функции можно использовать и при программировании на других языках программирования, например в программах, написанных на языке ассемблера. При этом, вызов API-функций осуществляется с помощью команды CALL, аналогично любой другой процедуре и функции. Параметры API функции передаются через стек: первый (находящийся слева) параметр функции передается в стек последним!

Для иллюстрации использования API-функций на языке ассемблера сравним вызовы одной и той же функции на Visual C++ и на ассемблере (рисунок 22)

а) б) Рисунок 1 - Связь между параметрами вызова API-функций на С++ (а) и ассемблере (б)

В приложении А приведены 2 программы, идентичные с точки зрения пользователя. Обе программы формируют окно, при нажатии к окне левой клавиши мыши формируется сообщение "Нажата левая клавиша", при нажатии правой клавиши мыши - "Нажата правая клавиша". Первая программа написана в среде Visual Studio 2008 на языке Visual C++ и исполняемый модуль (release-версия) имеет объем 8 кб, вторая программа написана на ассемблере и исполняемый модуль имеет объем 3 кб. Таким образом, программирование на языке ассемблера позволяет сформировать более компактный код.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: