Шаг 14 - Немного о COM интерфейсах

ActiveX строится на основе COM технологии. COM - Component Object Model - модель многокомпонентных объектов. Вобщем-то это стандарт взаимодействия объектов между друг другом. Например, нашего ActiveX и VBA как делалось в прошлых шагах. Объекты взаимодействуют через интерфейсы COM.

Технология взаимодействия стандартов основана на двуличной модели. Это дает независимость от языка программирования и средства разработки. Разрабатывался стандарт специально для повторного использования кода и вызова из других приложений. Самое главное, что COM описывает не структуру объекта, а его взаимодействие. COM сервисы могут быть двух типов.

Соотвественно первые - это библиотеки DLL, которые всегда выполняются локально, а вторые модули, которые могут работать как на локальном так и на удаленном компьютере.

Свой функции 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();

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.01.2000