Программирование графики с использованием Direct3D



         

COM - часть 2


Функции AddRef() и Release() увеличивают и уменьшают счетчик ссылок на объект. Функция QueryInterface() применяется для поиска дополнительных интерфейсов объекта (или определения того, что интерфейс не поддерживается данным объектом). Один из аргументов функции QueryInterface() — Глобальный Уникальный Идентификатор (GUID), который идентифицирует искомый интерфейс.

Все API DirectX построены на основе COM. Это, однако, не говорит о том, что вы должны быть профессионалом в COM, чтобы применять DirectX. Фактически, использование COM-объектов подобно использованию объектов C++. Ниже приведены некоторые правила, которые вам надо соблюдать при работе с COM.

  • COM-объекты и объекты C++ не могут быть производными друг от друга. Простейший способ получения класса C++ из COM-объекта, состоит во «внедрении» COM-объекта в классы C++ и написании функций-оболочек (wrapper functions) для каждой функции COM.
  • Каждый раз при создании копии указателя на COM-объект должна быть вызвана функция объекта AddRef() чтобы известить объект о создании дополнительной ссылки. Это не относится к созданию объекта. Обычно API DirectX выполняет эту работу за вас и включает вызов функции AddRef() в функцию, создающую COM-объект.
  • Каждый раз, когда указатель на COM-объект больше не нужен, должна быть вызвана функция объекта Release().
  • Функция QueryInterface() не всемогуща. Она возвратит интерфейсы объекта, только если объект поддерживает их. Попытка получить произвольные интерфейсы от объекта может потерпеть неудачу.
  • Если вы хотите узнать больше о COM, загрузите спецификацию с сайта Microsoft (www.microsoft.com).




    Содержание  Назад  Вперед