Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОП__подготовка.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
41.92 Кб
Скачать
  1. Именование 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.

В начало

  1. Теория интерфейсов. Виртуальная функция. Таблица виртуальных функций. Интерфейс iUnknown.

Виртуальная функция – функция, которая объявлена, но не имеет тела.

Таблица виртуальных функций – это таблица указателей на точки входа в методы класса. Для виртуальных методов они имеют значение NULL, а после выполнения функции CreateInstance() в таблицу виртуальных методов подставляются адреса реализации соответствующих методов в COM-объекте. В результате, вызывая методы интерфейса, мы обращаемся к методам самого объекта.

Не любой интерфейс является COM-интерфейсом.

Компонентом, который соответствует COM-технологии является только такой, который поддерживает IUknown.

IUknown – чисто абстрактный базовый класс, который содержит три обязательных виртуальных функции.

В COM-технологии интерфейс должен наследовать от интерфейса Uknown.

Интерфейс IUknown описан в заголовочном файле uknown.h.

Интерфейс Uknown позволяет сделать три вещи:

  • Получить указатель на интерфейс.

  • Увеличить счётчик ссылок на интерфейс

  • Уменьшить счётчик ссылок на интерфейс

Для получения указателя на IUknown существует функция, которая называется CreateInstance().

В начало

  1. Интерфейс 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().

В начало