27.1. Основы ole Automation
Стандарт COM основан на едином для всех языков программирования формате таблицы, описывающей ссылки на методы объекта, реализующего интерфейс. Однако вызов методов из этой таблицы доступен только для тех языков программирования, для которых есть трансляторы, переводящие весь текст программы в язык машинных кодов. Такой доступ к методам называется ранним связыванием. Для использования возможностей COM в интерпретирующих (скриптовых) языках программирования, таких как VBScript, Java, Perl и др., была разработана технология OLE Automation, которая позволяет вызывать методы объекта не по адресу, а по имени.
Технология автоматизации базируется на COM, однако накладывает на COM–серверы ряд дополнительных требований:
1. Интерфейс, реализуемый COM–сервером, должен наследоваться от IDispatch.
2. Должны использоваться типы данных из числа поддерживаемых OLE Automation (Byte, SmallInt, Integer, Currency, Single, Real48, Real, Double, ShortString, AnsiString, TDateTime, WordBool, Variant, OLEVariant).
3. Все методы должны быть процедурами или функциями, возвращающими значение типа HResult.
4. Все методы должны иметь соглашение о вызовах, соответствующее директиве safecall.
Центральным элементом технологии автоматизации является интерфейс IDispatch. В нем определяются методы GetIdsOfNames и Invoke, позволяющие клиенту узнать, поддерживает ли сервер метод с указанным именем, а затем, если метод поддерживается, вызвать его. Такой способ доступа к методам называется поздним связыванием. При позднем связывании не требуется наличие библиотеки типов, но при этом и не производится контроль правильности вызова метода на этапе проектирования программы, к тому же вызов методов осуществляется несколько медленнее, чем при раннем связывании.
Для контроля правильности вызова методов на этапе проектирования используется дополнительный диспинтерфейс (DispInterface). Он имеет тот же GUID, что и основной интерфейс, только его имя дополняется окончанием disp и каждому методу или свойству присваивается уникальный номер, который называется диспетчерским идентификатором (DISPID). Теперь методы сервера можно вызывать прямо через Invoke, передавая ему значение DISPID соответствующего метода. Следует отметить, что в описании диспинтерфейса могут присутствовать не все методы и свойства основного интерфейса.
Например, в библиотеке типов MS Office дано следующее определение интерфейса ICommandBarsEvents и его диспинтерфейса:
ICommandBarsEvents = interface(IDispatch)
['{55F88892-7708-11D1-ACEB-006008961DA5}']
procedure OnUpdate; stdcall;
end;
ICommandBarsEventsDisp = dispinterface
['{55F88892-7708-11D1-ACEB-006008961DA5}']
procedure OnUpdate; dispid 1;
end;
Такое двойное описание интерфейса позволяет клиентам обращаться к методам сервера или по стандартам COM раннего связывания через таблицу виртуальных методов (VTable) или использовать позднее связывание через методы IDispatch. Большинство OLE–серверов реализуют двойной интерфейс.
- Программирование в среде Delphi
- Программирование в среде Delphi
- 1. История развития вычислительной техники, системы счисления и единицы информации.................................................7
- 2. Структура персонального компьютера и операционные системы.........................................................................13
- 3. Основы алгоритмизации и работа в delphi..........................18
- 4. Базовые элементы delphi...................................................................26
- 5. Стандартные функции и подпрограммы................................30
- 6. Операторы delphi......................................................................................33
- 7. Операторы циклов....................................................................................35
- 18. Выделение памяти под объект и прародитель всех классов – tobject..........................................................................................84
- 19. Обработка исключительных ситуаций................................87
- 20. Основные классы и общие свойства компонентов...93
- 26. Технология com.....................................................................................129
- 1. История развития вычислительной техники, системы счисления и единицы информации
- 1.1. История развития вычислительной техники
- 1.2. Системы счисления
- 1.3. Единицы информации
- 2. Структура персонального компьютера и операционные системы
- 2.1. Структура персонального компьютера.
- 2.2. Операционные системы
- 3. Основы алгоритмизации и работа в delphi
- 3.1. Основы программирования
- 3.2. Программирование в среде Delphi
- 4. Базовые элементы delphi
- 4.1. Алфавит среды Delphi
- 4.2. Константы
- 4.3. Переменные
- 4.4. Основные типы переменных
- 4.5. Операции над переменными и константами
- 5. Стандартные функции и подпрограммы
- 5.1. Математические функции
- 5.2. Функции преобразования
- 5.3. Дополнительные системные подпрограммы и функции
- 6. Операторы delphi
- 6.1. Оператор присваивания
- 6.2. Оператор безусловной передачи управления
- 6.3. Условный оператор if
- 6.4. Оператор разветвления Case
- 6.5. Составной оператор
- 7. Операторы циклов
- 7.1. Оператор цикла For
- 7.2. Оператор цикла Repeat
- 7.3. Оператор цикла While
- 8. Работа с массивами
- 9. Работа со строками
- 9.1. Процедуры работы со строками
- 9.2. Функции работы со строками
- 10. Работа с записями
- 11. Процедуры и функции
- 12. Модуль unit
- 13. Работа со множествами
- 14. Работа с файлами
- 14.1. Текстовые файлы
- 14.2. Типированные файлы
- 14.3. Нетипированные файлы
- 15. Работа с файлами и каталогами
- 16. Динамические переменные и структуры данных
- 16.1. Динамические переменные
- 16.2. Работа со стеком
- 16.3. Работа со списками или очередями
- 16.4. Работа с деревьями
- 17. Основы объектно–ориентированного программирования
- 17.1. Объекты и классы
- 17.2. Области видимости класса
- 17.3. Свойства (Property) и инкапсуляция
- 17.4. Методы, наследование и полиморфизм
- 17.5. События (Events)
- 18. Выделение памяти под объект и прародитель всех классов – tobject
- 18.1. Выделение памяти под объект
- 18.2. Описание класса tObject
- 18.3. Операторы приведения типов классов
- 19. Обработка исключительных ситуаций
- 19.1. Два вида оператора Try
- 19.2. Программное создание исключительной ситуации
- 19.3. Основные исключительные ситуации
- 20. Основные классы и общие свойства компонентов
- 20.1. Класс tList
- 20.2. Класс tStrings
- 20.3. Общие свойства компонентов
- 21. Графические возможности delphi
- 21.1. Класс Tcanvas
- 21.2. Классы тGгарhic и тРicture
- 21.3. Классы tFont, tPen и tBrush
- 21.4. Работа с изображениями
- 22. Визуальные компоненты delphi
- 22.1. Компонент tBitBtn
- 22.2. Компоненты tDrawGrid и tStringGrid
- 22.3. Компонент tPageControl
- 22.4. Компонент tTimer
- 22.5. Компонент tGauge
- 22.6. Компонент tСolorGrid
- 23. Стандартные диалоговые окна и типовые диалоги
- 23.1. Стандартные диалоговые окна
- 23.2. Типовые диалоги
- 24. Форма, приложение и глобальные объекты
- 24.1. Форма и ее свойства
- 24.2. Объект Application
- 24.3. Глобальные объекты
- Объект ClipBoard
- Объект Screen
- Объект Printer
- 25. Межпрограммное взаимодействие
- 25.1. Обмен сообщениями
- 25.2. Динамический обмен данными
- 25.3. Совместное использование общей памяти
- 25.4. Каналы
- 25.5. Сокеты
- 26. Технология com
- 26.1. Интерфейс
- 27. Технология автоматизации
- 27.1. Основы ole Automation
- 27.2. Примеры использования серверов автоматизации
- 27.3. Компоненты ActiveX
- 28. Динамические библиотеки
- 28.1. Создание dll
- 28.2. Использование dll
- 28.3. Пример написания dll
- 29. Работа с базами данных
- 29.1. Основные определения
- 29.2. Взаимодействие приложения на Delphi с базами данных
- 29.3. Компоненты взаимодействия с базами данных
- If adoTable1.Locate(’fio,stag’,varArrayOf([’Иванов’,’10’]),[])Then …;
- 29.4. Работа с локальной базой данных
- 30. Основы языка sql
- 30.1. Составные части sql
- 30.2. Команда select
- 30.3. Пример использования запросов в Delphi
- 31. Создание собственных компонентов
- 32. Работа с реестром
- 33. Перспективы программирования в delphi
- Литература
- 220013, Минск, п.Бровки, 6