Архитектура Microsoft Windows для разработчиков



              

Пример 1



Пример 1

Здесь на Visual Basic выполняются методы AddRef и Release для объекта СОМ:

'Вызов метода AddRef

Set MyObject = CreateObject('Word.Application")

'Вызов метода Release

Set MyObject = Nothing

Интерфейс IDispatch

IDispatch — это интерфейс автоматизации для контроллеров, не использующих интерфейсы СОМ напрямую. Исполняемый файл или DLL, использующие I Dispatch, называют серверами автоматизации. При доступе к объекту через интерфейс IDispatch применяется отложенное связывание — реальный доступ происходит во время выполнения. IDispatch поддерживает следующие основные методы.

  • GetIDsOfNames — отображает имя одного члена класса и, по желанию, набор имен аргументов в соответствующий набор целых идентификаторов связи (Dispatch Identifier, DISPID), которые затем можно использовать в вызовах метода Invoke.
  • GetTypeInfo — извлекает информацию о типах объекта.
  • GetTypeInfoCount — извлекает информацию о типах, предоставляемых объектом (возвращает 0, если информации о типах нет, и 1 — если есть).
  • Invoke — предоставляет доступ к свойствам и методам объекта.

Во время выполнения клиент передает строку с именем свойства (или метода), которое он хочет вызвать, методу IDispatch.GetIDsOfNames. Если данное свойство (или метод) объекта существует, клиент получает идентификатор соответствующей функции. Затем его можно использовать для фактического вызова свойства (или метода) средствами метода IDispatch.Invoke. Методы GetTypeInfoCount и GetTypeInfo позволяют получать из библиотеки типов компонента информацию об интерфейсах, методах и свойствах, которые он поддерживает.

Пример В этом коде на Visual Basic функция CreateObject применяется в операторе Set для создания нового объекта, который использует отложенное связывание и интерфейс IDispatch.

Dim MyObject as Object

Set MyObject = CreateObject("Word.Application")

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

Виртуальные таблицы

Автоматизация позволяет ActiveX-клиенту вызывать метод или свойство напрямую. Этот способ, не использующий интерфейс IDispatch, называется связыванием через виртуальную таблицу. В Visual Basic применение виртуальной таблицы именуют ранним связыванием. Для него необходима информации о типах в виде библиотеки типов. Клиент получает эти данные на стадии компиляции, проверяет типы и синтаксис и затем вызывает методы и функции напрямую. На стадии выполнения раннее связывание работает гораздо быстрее, поскольку местонахождение сервера автоматизации уже известно, типы данных и синтаксис проверены, а доступ осуществляется непосредственно, без вызова IDispatch.

Для ссылки на экземпляры интерфейсов клиенты используют указатели, получая их во время создания объекта или запрашивая объект. Определив интерфейс, Вы

задаете массив указателей на функции, известный как виртуальная таблица (Virtual Table, VTBL). Функции, на которые указывают члены VTBL, называются методами, или функциями-членами интерфейса. Общепринято имена интерфейсов начинать с буквы «I».









Содержание  Назад  Вперед