- •Понятие компонента. Преимущества и недостатки использования компонентного подхода к проектированию программ.
- •Использование статических библиотек к проектированию программ: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Динамические библиотеки с неявным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка динамических библиотек с явным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка клиентов динамических библиотек с явным связыванием. Функции, используемые для разработки клиента. Функция 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().
- •Функции, обеспечивающие работу динамической библиотеки с компонентом.
- •Регистрация классов в реестре. Способы регистрации компонент в реестре.
- •Динамическая библиотека с явным подключением
Реализация метода QueryInterface(). Правила использования QueryInterface().
Метод QueryInterface() позволяет по идентификатору интерфейса (iid) получить указатель на интерфейс.
Функция AddRef() ведёт счётчик ссылок на этот интерфейс.
Функция Release() уменьшает счётчик ссылок на этот интерфейс.
public QueryInterface()
AddRef()
Release()
Fx1()
Fx2()
Метод QueryInterface() имеет два параметра: первый - iid – interface IDefiner (GUID interface),(указатель на GUID), а второй – указатель на интерфейс.
Правила: Создаётся указатель на интерфейс и его указатель передаётся на вход QueryInterface() вместе с GUID. После выполнения QueryInterface() этот указатель будет указывать на реализацию этого интерфейса в COM.
В начало
Время жизни компонента. Метод AddRef() и Release(). Правила подсчета ссылок.
Срок жизни компонента (сервера) зависит от наличия клиентов. Клиент регистрируется на сервере с помощью метода QueryInterface(), при этом увеличивается счётчик ссылок методом AddRef(). После того, как компонент перестаёт быть нужным вызывается метод Release, который разрывает связь между клиентом и компонентом. При этом счётчик ссылок уменьшается на 1. До тех пор, пока счётчик ссылок не равен нулю, COM-компонет имеет клиентов, а значит должен функционировать. После того, как счётчик ссылок обнулился, это означает, что клиентов не осталось, и необходимость содержания его в рабочем состоянии отпала.
Правила подсчёта ссылок: при каждом успешном обращении к QueryInterface() счётчик ссылок увеличивается с помощью AddRef(). Release уменьшает счётчик на 1 иразрывает связь между клиентом и компонентом.
Функция AddRef() ведёт счётчик ссылок на этот интерфейс.
Функция Release() уменьшает счётчик ссылок на этот интерфейс.
public QueryInterface()
AddRef()
Release()
Fx1()
Fx2()
В начало
Время жизни компонента. Метод Release(). Правила подсчета ссылок.
Срок жизни компонента (сервера) зависит от наличия клиентов. Клиент регистрируется на сервере с помощью метода QueryInterface(), при этом увеличивается счётчик ссылок методом AddRef(). После того, как компонент перестаёт быть нужным вызывается метод Release, который разрывает связь между клиентом и компонентом. При этом счётчик ссылок уменьшается на 1. До тех пор, пока счётчик ссылок не равен нулю, COM-компонет имеет клиентов, а значит должен функционировать. После того, как счётчик ссылок обнулился, это означает, что клиентов не осталось, и необходимость содержания его в рабочем состоянии отпала.
Правила подсчёта ссылок: при каждом успешном обращении к QueryInterface() счётчик ссылок увеличивается с помощью AddRef(). Release уменьшает счётчик на 1 иразрывает связь между клиентом и компонентом.
Функция AddRef() ведёт счётчик ссылок на этот интерфейс.
Функция Release() уменьшает счётчик ссылок на этот интерфейс.
public QueryInterface()
AddRef()
Release()
Fx1()
Fx2()
В начало
Реализация компонента в виде динамической библиотеки. Диаграмма компонент.
Диагра́мма компоне́нтов, Component diagram — статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.
Реализация компонента: Создать проект Win32, выбрать в мастере создания проекта «Библиотека DLL», создать в проекте заголовочные файлы и файлы исходного кода, в которых реализованы библиотечные функции. Классы, функции и т.п., которые должны быть доступны клиенту библиотеки помечаются как экспортируемые одним из двух способов: через def-файл, либо с помощью добавления конструкции « __declspec(dllexport) тип данных имя функции();»перед объявлением экспортируемого класса или функции.
В начало
