Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Direct Draw Термины и концепции - Спецификация СОМ фирмы Microsoft

Библиотека DirectDraw реализована в соответствии со спецификацией СОМ (многокомпонентная модель объекта, Component Object Model) фирмы Microsoft. Спецификация СОМ предназначена для создания стопроцентно переносимых программных компонентов, наделенных возможностью безопасного обновления. О СОМ можно рассказать довольно много, но эта книга посвящена другой теме. Мы рассмотрим СОМ лишь в объеме, необходимом для использования DirectDraw.

В СОМ используется объектно-ориентированная модель, более жесткая, чем модели, принятые в языках типа C++. Так, доступ к СОМ-объектам всегда осуществляется с помощью функций. СОМ-объекты не могут иметь открытых переменных. Кроме того, наследование в СОМ выглядит ограниченным по сравнению с C++.

Объекты и интерфейсы

В СОМ четко разграничены понятия объектов и интерфейсов. СОМ-объекты обеспечивают настоящую функциональность, тогда как СОМ-интерфейсы предоставляют способы для работы с ней. Обращения к СОМ-объектам никогда не осуществляются напрямую, а только через интерфейсы. Это правило соблюдается так строго, что мы даже не знаем имен СОМ-объектов. Известны лишь имена интерфейсов, используемых для работы с объектами. Поскольку прямое обращение к СОМ-объектам невозможно, в дальнейшем речь пойдет в основном об интерфейсах.

СОМ-объект может поддерживать сразу несколько интерфейсов. На первый взгляд это может показаться странным, но все объясняется тем, что в соответствии со спецификацией СОМ-интерфейс после своего определения не может быть изменен или дополнен. Это было сделано для того, чтобы не нарушать работу старых программ при обновлении СОМ-объекта. Исходный интерфейс остается неизменным, а для работы с новыми функциональными возможностями объекта добавляется новый альтернативный интерфейс.

Интерфейс IUnknown

Все СОМ-интерфейсы являются производными от интерфейса IUnknown. Префикс I (от слова interface, то есть интерфейс) является стандартным для имен СОМ-интерфейсов. Имена всех интерфейсов DirectDraw начинаются с I, однако в документации обычно приводятся без префикса. В этой книге при упоминании СОМ-интерфейсов префикс I также будет опускаться.

Интерфейс lUnknown содержит три функции, наследуемые всеми СОМ-интерфей-сами.

AddRef()
Release()
Querylnterface

Функции AddRef и Release обеспечивают поддержку такого средства СОМ, как инкапсуляция времени существования (lifetime encapsulation). Она представляет собой протокол, согласно которому каждый объект сам отвечает за свое уничтожение.

Инкапсуляция времени существования реализована с помощью счетчика ссылок. Каждый объект содержит внутреннюю переменную, в которой отслеживается количество указателей или ссылок на него. В момент создания объекта счетчик равен 1. При создании дополнительных интерфейсов или указателей на интерфейсы значение счетчика увеличивается, а при уничтожении указателей на интерфейсы — уменьшается. Когда счетчик ссылок падает до нуля, объект уничтожает себя.

Функция AddRef служит для увеличения внутреннего счетчика ссылок объекта. В подавляющем большинстве случаев она вызывается самими функциями Direct Draw API. Например, при создании нового интерфейса функцией DirectDraw API создающая функция автоматически вызывает AddRef.

Функция Release уменьшает значение внутреннего счетчика ссылок. Ее следует применять при завершении работы с указателем или его выходе из области видимости. Обе функции, AddRef и Release, возвращают значение, равное новому состоянию счетчика ссылок объекта.

Функция QueryInterface() позволяет обратиться к СОМ-объекту с запросом о том, поддерживает ли он тот или иной интерфейс. Вспомните, например, что обновленные СОМ-объекты предоставляют дополнительные интерфейсы, не изменяя существующих. Если данный интерфейс не поддерживается запрашиваемым объектом, возвращается указатель на альтернативный интерфейс.

GUID

Чтобы обратиться к объекту с запросом о поддержке некоторого интерфейса, используя функцию QueryInterface, необходимо как-то идентифицировать этот интерфейс. Для этого используется значение GUID (глобально-уникального идентификатора, Globally Unique IDentifier) данного интерфейса. GUID представляет собой 128-битное значение, уникальное для всех практических целей. Значения GUID всех интерфейсов DirectDraw включены в заголовочные файлы DirectX.

Такого краткого введения в СОМ вполне достаточно для эффективной работы с DirectDraw API. Далее, по мере обсуждения DirectDraw API, вы поймете, насколько важна эта информация.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог