ActiveX строится на основе COM технологии. COM - Component Object Model - модель многокомпонентных объектов. Вобщем-то это стандарт взаимодействия объектов между друг другом. Например, нашего ActiveX и VBA как делалось в прошлых шагах. Объекты взаимодействуют через интерфейсы COM.
Технология взаимодействия стандартов основана на двуличной модели. Это дает независимость от языка программирования и средства разработки. Разрабатывался стандарт специально для повторного использования кода и вызова из других приложений. Самое главное, что COM описывает не структуру объекта, а его взаимодействие. COM сервисы могут быть двух типов.
Свой функции COM объекты поставляют через интерфейс. Интерфейс - это указатель на функции вызываемые клиентом. При взаимодейтсвии между клиентом и объектом COM определяется:
Все объекты COM поддерживают минимум один интерфейс IUnknown - это стандартный интерфейс, который управляет всеми другими интерфейсами объекта. Этот интерфейс имеет три основные метода:
AddRef() Release() QueryInterface()
Метод AddRef() создает объект COM. Это аналог своебразного конструктора. При создании каждого экземпляра счетчик на него увеличиватся. Вот как это используется в VBA:
Set COMObject = CreateObject("Excel.Application")
Метод Release предоставляет список интерфейсов. В VBA это происходит автоматически по Set.
Метод Release применяется для удаления объекта и уменьшения счетчика на него. В VBA это делается так.
Set COMObject = Nothing
Для программ не использующих интерфейс COM напрямую есть интерфейс IDispatch. При использовании этого интерфейса происходит позднее связывание. То есть как в DLL реальный доступ происходит только во время работы. Он поддерживает следующие основные методы.
GetIDsOfNames используеться для получения идентификатора связи GetTypeInfo получение информации о типах объектов GetTypeInfoCount проверяет есть ли информация о типах объектов Invoke предоставляет доступ с свойствам и методам объектов
При использовании ActiveX клиент вызывает метод или свойство напрямую. Этот метод называется связыванием через виртуальную таблицу. Данные о методах хранятся в массиве указателей, которые имеют имя Virtual Table или VTBL.
Отличие раннего связывания от отложенного.
отложенное связывание Dim COMObject as Object Set COMObject = CreateObject("Excel.Application"); COMObject.MyFunction(); | ..... ------------------------> IDispath::Invode -------- | ------------------------> Interfice::MyFunction <-- | ....... | раннее связывание Dim COMObject as COMClass.COMObject Set COMObject = CreateObject("Excel.Application"); COMObject.MyFunction();