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



         

COM


Microsoft COM (Component Object Model) — это программная модель разработанная с целью позволить создание полностью переносимых компонентов, допускающих безопасное обновление. С точки зрения COM программные компоненты должны устанавливаться также легко, как и аппаратные. COM — основа некоторых API, таких как OLE и DirectX.

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

COM-компонент состоит из объекта и одного или нескольких интерфейсов посредством которых осуществляется доступ к объекту. Объект обеспечивает функциональность, предоставляемую COM-компонентом, но к нему нельзя обратиться напрямую. К COM-объектам всегда обращаются через интерфейсы. Один объект может поддерживать несколько интерфейсов. Рис. 3.1 иллюстрирует отношения объект/интерфейс.


Рис. 3.1. COM-объекты и интерфейсы

Рис. 3.1. COM-объекты и интерфейсы

Рисунок иллюстрирует взаимодействие приложения с COM-объектом. Приложение использует COM-объект только через поддерживаемые объектом интерфейсы.

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

COM также поддерживает свойство, названное инкапсуляция времени существования (lifetime encapsulation). Инкапсуляция времени существования означает, что COM-объекты управляют своим собственным уничтожением. Когда объект обнаружит, что он больше не нужен, он уничтожит себя сам. Чтобы эта функция работала корректно, программы должны уведомлять объекты, при создании нового указателя на объект и при уничтожении указателя.

Все COM-объекты являются производными от COM-объекта IUnknown, предоставляющего три функции: AddRef(), Release() и QueryInterface().


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