Где мы находимся?
В этой главе была представлена концепция интерфейса СОМ. Интерфейсы
СОМ обладают простыми двоичными сигнатурами, которые позволяют любому
клиенту обращаться к объекту независимо от языка программирования, использованного
клиентом или конструктором объекта. Чтобы облегчить поддержку различных
языков, интерфейсы СОМ определяются на языке IDL (Interface Definition
Language). Эти IDL-определения интерфейса могут быть также использованы
для генерирования кода передачи данных (communications code), который
позволяет получать доступ к объекту через сеть.
Большая часть этой главы была посвящена IUnknown - базовому
интерфейсу, на котором построен весь СОМ. Все интерфейсы СОМ должны наследовать
от IUnknown. Следовательно, все объекты СОМ должны реализовывать
IUnknown. В IUnknown предусмотрено три сигнатуры метода, посредством
которых клиент может безошибочно управлять иерархией типов объекта для
доступа к дополнительным возможностям, предоставляемым этим объектом.
С учетом этого QueryInterface можно рассматривать как оператор
приведения типа в СОМ. По этой же причине IUnknown можно рассматривать
как "void *" (указатель на пустой тип) среди указателей
интерфейса, так как от него не слишком много пользы до тех пор, пока он
не "приведен" (is "cast") к чему-нибудь более содержательному
с помощью QueryInterface.
Следует заметить, что при обращении или реализации IUnknown
не было сделано никаких существенных системных вызовов. В этом смысле
IUnknown просто является протоколом или набором обещаний (promises),
которого должны придерживаться все программы. Это позволяет объектам СОМ
быть очень простыми и эффективными. Реализация IUnknown в C++
требует всего нескольких строк стандартного кода. Чтобы автоматизировать
реализацию IUnknown в C++, была представлена серия макросов для
препроцессора, которые реализуют QueryInterface под табличным
управлением. Хотя эти макросы не были совершенно необходимыми, они удаляли
большую часть общего стандартного кода из каждого определения класса,
не внося при этом заметных усложнений в реализацию.
Глава 3. Классы
|