Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Спецификация СОМ фирмы 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, вы поймете, насколько важна эта информация.


[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены
Rambler's Top100