Сущность технологии COM



Использование SCM - часть 4


Можно построить пример и таким образом, чтобы любая неизвестная горилла могла быть использована для удовлетворения запроса:

HRESULT CreateAGorillaAndEatBanana(void) { IApeClass *pgc = 0; // find the class object via CoGetClassObject // находим объект класса с помощью CoGetClassObject HRESULT hr = CoGetClassObject(CLSID_Gorilla, CLSCTX_ALL, 0, IID_IApeClass, (void**)&pgc); if (SUCCEEDED(hr)) { IApe *pApe = 0; // use the class object to create a new gorilla // используем объект класса для создания новой гориллы hr = pgc->CreateApe(&pApe); if (SUCCEEDED(hr)) { // tell the new gorilla to eat a banana // прикажем новой горилле есть бананы hr = pApe->EatBanana(); pApe->Release(); } pgc->Release(); } return hr; }

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

1

Это разделение в значительной степени концептуально, так как библиотека СОМ и протокол передачи (wire-protocol) реализуют каждый примитив как отдельную ветвь программы и формат пакета.

2

Внутрипроцессные обработчики (in-process handlers) — в значительной степени пережитки документации OLE. Эти обработчики являются виутрипроцессными компонентами, выступающими в качестве представителей клиентской стороны объекта, который в действительности находится в другом процессе. Обработчики используются в документах OLE для кэширования изображений у клиента с целью сократить поток IPC (interprocess communication — межпроцессное взаимодействие) при перерисовке экрана. Хотя эти обработчики в общем случае производят считывание, они редко используются вне контекста документов OLE. Windows NT 5.0 будет обеспечивать дополнительные возможности для реализации обработчиков, но подробности того, как это будет достигнуто, были еще схематичны во время написания этой книги.

3

Требования параллелизма для класса должны технически соответствовать таким же требованиям в потоке вызова.




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