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



         

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


Именно в реализациях метода этих других интерфейсов интерфейсный заместитель должен использовать канал для посылки запросов ORPC на метод интерфейсной заглушки Invoke, который затем обрабатывает этот метод в апартаменте объекта.

Интерфейсные заместители и интерфейсные заглушки динамически связываются и совместно используют единый CLSID как для заместителя, так и для заглушки. Такую раздвоенную реализацию часто называют интерфейсным маршалером (interface marshaler). Объект класса интерфейсного маршалера выставляет интерфейс IPSFactoryBuffer:

[ uuid(D5F569DO-593B-101A-B569-08002B2DBF7A), local, object ] interface IPSFactoryBuffer : IUnknown { HRESULT CreateProxy( [in] IUnknown *pUnkOuter, // ptr to proxy manager // указатель на администратор заместителей [in] REFIID riid, // the requested itf to remote // запрошенный интерфейс для удаленного доступа [out] IRpcProxyBuffer **ppProxy, // ptr. to proxy itf. // указатель на интерфейс заместителя [out] void **ppv // ptr to remoting interface // указатель на удаленный интерфейс );

HRESULT CreateStub( [in] REFIID riid, // the requested itf to remote // запрошенный интерфейс для удаленного доступа [in] IUnknown *pUnkServer, // ptr to actual object // указатель на действующий объект [out] IRpcStubBuffer **ppStub // ptr to stub on output // указатель на заглушку на выходе ); }

Администратор заместителей вызывает метод CreateProxy с целью агрегирования нового интерфейсного заместителя. Администратор заглушек вызывает метод CreateStub с целью создания новой интерфейсной заглушки.

Когда в объекте запрашивается новый интерфейс, то администраторы заместителей и заглушек должны преобразовать запрошенные IID и CLSID интерфейсного маршалера. Под Windows NT 5.0 хранилише класса совершает эти преобразования в директории NT, и они кэшируются в локальном реестре каждой хост-машины. Отображения IID в CLSID всей машины кэшируются в

HKEY_CLASSES_ROOT\Interface

а отображения каждого пользователя кэшируются в

HKEY_CURRENT_USER\Software\Classes\Interface




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