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



         

Архитектура стандартного маршалинга - часть 4


Это создает у клиента иллюзию, что все интерфейсы выставляются одним СОМ-объектом. На рис. 5.4 показаны отношения между администратором заместителей, интерфейсными заместителями и заглушкой.

Рис. 5.4. Архитектура заместителей

Как показано на рис. 5.4, заместитель связывается с заглушкой через третий объект, называемый каналом. Канал — это поддерживаемая СОМ обертка вокруг слоя RPC на этапе выполнения. Канал выставляет интерфейс IRpcChannelBuffer

[ uuid(D5F56B60-593B-101A-B569-08002B2DBF7A), local, object ] interface IRpcChannelBuffer : IUnknown { // programmatic representation of ORPC message // программное представление сообщения ORPC typedef struct tagRPCOLEMESSAGE { void *reserved1; unsigned long dataRepresentation; // endian/ebcdic // endian /расширенный двоично-десятичный код // для обмена информацией void *Buffer; // payload goes here // полезная нагрузка идет сюда ULONG cbBuffer; // length of payload // длина полезной нагрузки ULONG iMethod; // which method? // чей метод? void *reserved2[5]; ULONG rpcFlags; } RPCOLEMESSAGE;

// allocate a transmission buffer // выделяем буфер для передачи HRESULT GetBuffer([inl RPCOLEMESSAGE *pMessage, [in] REFIID riid); // send an ORPC request and receive an ORPC response // посылаем ORPC-запрос и получаем ORPC-ответ HRESULT SendReceive([in,out] RPCOLEMESSAGE *pMessage, [out] ULONG *pStatus); // deallocate a transmission buffer // освобождаем буфер передачи HRESULT FreeBuffer([in] RPCOLEMESSAGE *pMessage); // get distance to destination for CoMarshalInterface // получаем расстояние до адресата для CoMarshalInterface HRESULT GetDestCtx([out] DWORD *pdwDestCtx, [out] void **ppvDestCtx); // check for explicit disconnects // проверяем явные отсоединения HRESULT IsConnected(void); }

Интерфейсные заместители используют метод SendReceive этого интерфейса, чтобы заставить канал послать блок запросов ORPC и получить блок ответов ORPC.

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


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