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



         

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


Интерфейсная заглушка должна выставить интерфейс IRpcStubBuffer:

[ uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A), local, object ] interface IRpcStubBuffer : IUnknown { // called to connect stub to object // вызван для соединения заглушки с объектом HRESULT Connect([in] IUnknown *pUnkServer), // called to inform stub to release object // вызван для информирования заглушки об освобождении объекта void Disconnect(void); // called when ORPC request arrives // вызывается, когда поступает запрос ORPC HRESULT Invoke ([in] RPCOLEMESSAGE *pmsg, [in] IRpcChannelBuffer *pChannel); // used to support multiple itf types per stub // используется для поддержки нескольких типов интерфейсов // для одной заглушки IRpcStubBuffer *IsIIDSupported([in] REFIID riid); // used to support multiple itf types per stub // используется для поддержки нескольких интерфейсов // для одной заглушки ULONG CountRefs(vold); // used by ORPC debugger to find pointer to object // используется отладчиком ORPC для поиска указателя на объект HRESULT DebugServerQueryInterface(void **ppv); // used by ORPC debugger to release pointer to object // используется отладчиком ORPC для освобождения указателя на объект void DebugServerRelease(void *pv); }

Метод Invoke будет вызываться библиотекой СОМ, когда поступит запрос ORPC на объект. При вводе маршалированные [in]-параметры будут находиться в RPCOLEMESSAGE, а при выводе заглушка должна маршалировать HRESULT метода и любые [out]-параметры, которые будут возвращены в блоке ответов ORPC.

Интерфейсный заместитель должен выставлять интерфейс (интерфейсы), за удаленный доступ к которым он отвечает, в дополнение к интерфейсу IRpcProxyBuffer:

[ uuid(D5F56A34-593B-101A-B569-08002B2DBF7A), local, object ] interface IRpcProxyBuffer : IUnknown { HRESULT Connect([in] IRpcChannelBuffer *pChannelBuffer); void Disconnect(void); }

Интерфейс IRpcPгoxуBuffer должен быть неделегирующим интерфейсом IUnknown интерфейсного заместителя. Все остальные интерфейсы, которые выставляет интерфейсный заместитель, должны делегировать администратору заместителей свои методы IUnknown.


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