русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Глава 6. Использование Win32 API


Дата добавления: 2015-06-12; просмотров: 1096; Нарушение авторских прав


Win32 Application Programming Interface (API) – библиотека, доступная каждому программисту, создающему приложения в среде Windows. Она используется для создания приложений для любых 32-разрядных операционных систем фирмы Microsoft.

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

В Microsoft Office шаблоны являются каркасами приложений, примером практической реализации принципа многократного использования программных компонентов.

Операционные системы Windows разрабатывались на основе модели WOSA (Windows Open Services Architecture – открытая архитектура служб Windows). В соответствии с этой концепцией API служит своего рода черным ящиком: все функции, используемые в Windows, вынесены «на всеобщее обозрение» (известны их имена, назначение, списки параметров, возвращаемые значения), но без описания деталей их реализации.

Все сервисы WOSA делятся на три группы:

Базовые сервисы: Win32 API (позволяет использовать в приложениях практически любые функции Windows 95 или Windows NT); ODBC API (возможность связываться с любыми источниками данных независимо от разработчика); MAPI (Messaging API – реализация доступа к почтовым системам, использующим MAPI); TAPI (Telephony API – доступ к коммутируемым (телефонным) линиям); OLE API (поддержка связывания и внедрения объектов);

Коммуникационные сервисы: Sockets API (доступ к сети с помощью различных сетевых протоколов); SNA API (открытый доступ к большим ЭВМ – мэйнфреймам фирмы IBM); RPC API (удаленный вызов процедур, позволяющий упростить разработку клиент/серверных распределенных систем);

Сервисы вертикальных приложений (бизнес-сервисы) – расширения WOSA для систем электронной коммерции, обработки биржевой информации в реальном времени, для систем управления, разработки и производства.



Можно сказать, что Win32 API состоит из двух компонентов: библиотек динамической компоновки (DLL) и описаний к ним. Создание нового API сводится фактически к разработке новой библиотеки.

Использование функций Win32 API расширяет возможности VBA. Для подключения функций Win32 API их необходимо описать с помощью специальной инструкции Declare. Эта инструкция (описатель) сообщает программе, где находится требуемая функция API и как ее использовать. В описателе указывается следующая информация: имя функции, содержащая функцию DLL, передаваемые в функцию параметры, тип возвращаемых данных. Правило записи инструкции приведено ниже:

Declare Function | Sub Псевдоним Lib “ИмяБиблиотеки” _
[Alias “ИмяФункцииAPI”](СписокПараметров) _
[As ТипРезультата]

Основные библиотеки Windows 95 имеют следующее назначение: KERNEL32 – функции ядра ОС (низкоуровневые функции управления ресурсами и процессами), GDI32 – функции управления графическим интерфейсом, USER32 – функции для работы с окнами.

Если функция API возвращает данные строкового типа, необходимо указать буфер, представляющий собой переменную для хранения возвращаемой строки и число, определяющее длину буфера. Строки, возвращаемые функциями API, заканчиваются символом с кодом 0 (это ASCIIZ-код), поэтому размер буфера должен быть на 1 больше предполагаемой длины строки.

При передаче в функцию API строковой переменной она воспринимается как указатель. Для передачи в функцию пустого указателя в VBA используется значение 0& (нуль типа Long). При передаче в функцию пустого указателя необходимо внести в описатель функции изменения: тип аргумента можно указать как As Any, при этом в функцию можно передать как строковые переменные, так и переменные типа Long, если нужно.

Для облегчения работы с объектами в Windows используются их числовые идентификаторы. Существует вида типа таких идентификаторов: дескрипторы и указатели. Дескриптор – это специальное 32-битное целое число, которое используется Windows для идентификации объекта, например, окна или потока. Большинство функций Win32 API работает с дескрипторами. Указатель – это адрес объекта, переменной или структуры. VBA их не использует, но многие функции API требуют передачи указателей в качестве аргументов. При вызове данных функций из программы VBA необходимо использовать переменную того же типа, что и переменная, на которую ссылается указатель, и использовать ключевое слово ByRef в описании функции.

Текстовые строки всегда передаются в функции из библиотек DLL по ссылке. Ключевое слово ByVal для строковых аргументов задает преобразование строки в формат с окончанием на нулевой символ. Использование ключевого слова ByRefдля строковых аргументов недопустимо.

Ниже приведен пример использования функции GetSystemDirectory для получения полного имени системной папки Windows. В модуле, содержащем вызов функции, должен содержаться описатель:

Declare Function GetSystemDirectory Lib “KERNEL32” ­_

Alias “GetSystemDirectoryA” _

(ByVal lpBuffer As String , _

ByVal nSize As Long) As Long

Далее приведен пример процедуры, обращающейся к данной функции:

Sub Ex_GetSystemDirectory ()

Dim strBuffer As String

Dim intLen As Integer

‘ Выделение памяти для буфера (возвращаемой строки):

strBuffer = String(256, 0)

‘ Получение полного имени системной папки:

intLen = GetSystemDirectory (strBuffer, _

Len(strBuffer))

‘ Отсекается пустой «хвост» строки:

strBuffer = Left(strBuffer, intLen)

MsgBox Prompt := strBuffer, _

Buttons := vbInformation, _

Title := “Системная папка”



<== предыдущая лекция | следующая лекция ==>
Открытие проектов, экспорт и импорт | End Sub


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.352 сек.