- •Понятие компонента. Преимущества и недостатки использования компонентного подхода к проектированию программ.
- •Использование статических библиотек к проектированию программ: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Динамические библиотеки с неявным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка динамических библиотек с явным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка клиентов динамических библиотек с явным связыванием. Функции, используемые для разработки клиента. Функция DllMain().
- •Основы com: понятие клиент-серверных систем, этапы взаимодействия клиента и сервера. Задачи, решаемые в com-технологии.
- •Именование com-объектов. Guid. Использование guid. Хранение guid в системе.
- •Теория интерфейсов. Виртуальная функция. Таблица виртуальных функций. Интерфейс iUnknown.
- •Интерфейс iUnknown. Метод QueryInterface(): параметры, возвращаемое значение, пример использования. Использование QueryInterface().
- •Реализация метода QueryInterface(). Правила использования QueryInterface().
- •Время жизни компонента. Метод AddRef() и Release(). Правила подсчета ссылок.
- •Время жизни компонента. Метод Release(). Правила подсчета ссылок.
- •Реализация компонента в виде динамической библиотеки. Диаграмма компонент.
- •Обработка ошибок в com. Hresult. Макросы succedeed() и fail().
- •Хранение guid в реестре. Информация о классе, хранимая в реестре. Инициализация com-библиотеки в клиенте.
- •Создание объектов при помощи функции CoCreateInstance(). Использование. Достоинства, недостатки.
- •Фабрика классов. Интерфейс iClassFactory(). Методы этого интерфейса. Метод GetClassObject().
- •Фабрика классов. Протокол использования фабрики классов с использованием интерфейса iClassFactory().
- •Функции, обеспечивающие работу динамической библиотеки с компонентом.
- •Регистрация классов в реестре. Способы регистрации компонент в реестре.
- •Динамическая библиотека с явным подключением
Обработка ошибок в com. Hresult. Макросы succedeed() и fail().
HRESULT – большое число, которое позволяет однозначно идентифицировать различные ошибки в разных интерфейсах.
Структура HRESULT:
-
S(31)
Средства(30-16)
Код возврата (15-0)
Старший бит S определяет наличие ошибки. Если S=1, то ошибка есть, если S=0, то ошибки нет.
Все ошибки в COM-технологии возвращаются переменной, которая имеет тип HRESULT.
Для проверки значения используются специальные макросы.
Макросы называются:
SUCCEDEED() (hr) – успешное завершение.
FAIL (hr) – ошибочное завершение.
Заголовочный файл winerror.h содержит макросы, применяемые к HRESULT для проверки тех или иных кодов ошибки. Существуют следующие макросы для определения ошибок по значению HRESULT: S_OK, S_FALSE, NOERROR, E_FAIL, E_NOINTERFACE, E_OUTOFMEMORY и др.
В начало
Хранение guid в реестре. Информация о классе, хранимая в реестре. Инициализация com-библиотеки в клиенте.
Информация о COM-сервере (компоненте) хранится в реестре, в ключе, идентифицируемом по GUID'у.
В реестре принято задавать GUID'ы для интерфейсов.
Подраздел реестра или ключ, содержащий описание COM-компонента подписывается его GUID'ом. Внутри подраздела содержатся записи о расположении и имени программного модуля, в котором реализован интерфейс, ProgID компонента, VersionIndependentProgID и др. Кроме того, реестр содержит перечень ключей ProgID, в которых содержится соответствующий им GUID. Таким образом, реестр позволяет вести учёт компонентов, интерфейсов, фабрик классов, библиотек типов.
Метод QueryInterface(), который возвращает ссылку на объект по GUID’у выполняет:
1)поиск подраздела COM-компонента в реестре по его GUID
2)считывает из ключа ProgID размещение программного модуля, реализующего этот компонент
3)запускает этот программный модуль
4)возвращает указатель на интерфейс созданного модуля
В начало
Создание объектов при помощи функции CoCreateInstance(). Использование. Достоинства, недостатки.
Для создания компонента клиент должен вызвать функцию CoCreateInstance(). CoCreateInstance() создает фабрику класса и использует ее интерфейс IClassFactory для создания COM объекта. Интерфейс IClassFactory состоит из двух функций. Функция CreateInstance() создает запрашиваемый компонент. Функция LockServer() служит для удержания сервера в памяти до окончания работы с фабрикой класса.
В начало
Фабрика классов. Интерфейс iClassFactory(). Методы этого интерфейса. Метод GetClassObject().
Фабрика класса - это COM объект, который служит для создания других объектов. Она нужна для того, чтобы иметь возможность контролировать процесс создания и инициализации COM объекта.
Для создания компонента клиент должен вызвать функцию CoCreateInstance(). CoCreateInstance() создает фабрику класса и использует ее интерфейс IClassFactory для создания COM объекта. Интерфейс IClassFactory состоит из двух функций. Функция CreateInstance() создает запрашиваемый компонент. Функция LockServer() служит для удержания сервера в памяти до окончания работы с фабрикой класса.
Для создания экземпляра фабрики класса предназначена функция библиотеки COM CoGetClassObject().
В начало
Фабрика классов. Протокол использования фабрики классов с использованием интерфейса iClassFactory().
Фабрика класса - это COM объект, который служит для создания других объектов. Она нужна для того, чтобы иметь возможность контролировать процесс создания и инициализации COM объекта.
Для создания компонента клиент должен вызвать функцию CoCreateInstance(). CoCreateInstance() создает фабрику класса и использует ее интерфейс IClassFactory для создания COM объекта. Интерфейс IClassFactory состоит из двух функций. Функция CreateInstance() создает запрашиваемый компонент. Функция LockServer() служит для удержания сервера в памяти до окончания работы с фабрикой класса.
Для создания экземпляра фабрики класса предназначена функция библиотеки COM CoGetClassObject().
В начало
