
- •Понятие компонента. Преимущества и недостатки использования компонентного подхода к проектированию программ.
- •Использование статических библиотек к проектированию программ: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Динамические библиотеки с неявным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка динамических библиотек с явным связыванием: создание библиотеки, использование, распространение библиотек, достоинства и недостатки.
- •Разработка клиентов динамических библиотек с явным связыванием. Функции, используемые для разработки клиента. Функция 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-объектов. Guid. Использование guid. Хранение guid в системе.
Когда COM-объект существует в памяти, он не нуждается ни в каком имени, у него есть адрес по которому он доступен и обращение к нему такое же, как к своему внутреннему объекту. Проблема именования относится целиком к именованию статических типов.
GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов.
GUID – разновидность UUID.
UUID - universally unique identifier, вселенски уникальный идентификатор. Идея UUID состоит в следующем - для числа достаточной разрядности диапазон различных представимых значений значительно больше числа объектов, которые требуют перенумерования.
Существует прилагающийся к Visual Studio Генератор GUID, с помощью которого можно создавать GUID’ы различных типов.
При создании GUID'а используются: MAC-адрес сетевой карты, имя материнской платы, имя и data BIOS'а, текущее время. Уникальность набора этих значений в каждый момент времени и на каждом компьютере обеспечивает уникальность GUID'а.
Данные о COM-компонентах хранятся в реестре и идентифицируются по GUID.
В начало
Теория интерфейсов. Виртуальная функция. Таблица виртуальных функций. Интерфейс iUnknown.
Виртуальная функция – функция, которая объявлена, но не имеет тела.
Таблица виртуальных функций – это таблица указателей на точки входа в методы класса. Для виртуальных методов они имеют значение NULL, а после выполнения функции CreateInstance() в таблицу виртуальных методов подставляются адреса реализации соответствующих методов в COM-объекте. В результате, вызывая методы интерфейса, мы обращаемся к методам самого объекта.
Не любой интерфейс является COM-интерфейсом.
Компонентом, который соответствует COM-технологии является только такой, который поддерживает IUknown.
IUknown – чисто абстрактный базовый класс, который содержит три обязательных виртуальных функции.
В COM-технологии интерфейс должен наследовать от интерфейса Uknown.
Интерфейс IUknown описан в заголовочном файле uknown.h.
Интерфейс Uknown позволяет сделать три вещи:
Получить указатель на интерфейс.
Увеличить счётчик ссылок на интерфейс
Уменьшить счётчик ссылок на интерфейс
Для получения указателя на IUknown существует функция, которая называется CreateInstance().
В начало
Интерфейс iUnknown. Метод QueryInterface(): параметры, возвращаемое значение, пример использования. Использование QueryInterface().
IUknown – чисто абстрактный базовый класс, который содержит три обязательных виртуальных функции.
Интерфейс IUknown описан в заголовочном файле uknown.h.
Интерфейс Uknown позволяет сделать три вещи:
Получить указатель на интерфейс.
Увеличить счётчик ссылок на интерфейс
Уменьшить счётчик ссылок на интерфейс
Для получения указателя на IUknown существует функция, которая называется CreateInstance().Эта функция возвращает указатель на IUknown.
Метод QueryInterface() позволяет по идентификатору интерфейса (iid) получить указатель на интерфейс.
Функция AddRef() ведёт счётчик ссылок на этот интерфейс.
Функция Release() уменьшает счётчик ссылок на этот интерфейс.
public QueryInterface()
AddRef()
Release()
Fx1()
Fx2()
Метод QueryInterface() имеет два параметра: первый - iid – interface IDefiner (GUID interface) (указатель на GUID), а второй – указатель на интерфейс.
В COM-технологии с интерфейсами работают так:
1)CreateInstance() создаёт компонент и возвращает указатель на единственный известный всем интерфейс.
2)При помощи метода QueryInterface запросить указатель на интерфейс, который нам нужен.
3)Получив указатель на интерфейс, вызвать его методом Ix->Fx().
В начало