аггрегирование интерфейса
От: oncer  
Дата: 14.11.12 11:36
Оценка:
есть ли возможность Аггрегировать средствами ATL отдельный интерфейс (реальный указатель на валидный интерефейс реализованный каким -либо классом) а не весь COM класс?

1) Есть Интерфейс IAint: кто-то (3rd party) создает COM обьект который имплементирует этот интерфейс и дергает мой метод передавая как параметр указатель на этот интерфейс.

2) Хочу аггрегировать этот интерфейс IAint своим CoClass-ом: хочу подсовывать свой COM обьект другим клиентам как якобы имплементирующий IAint (на самом деле все QueryInterface на IAint буду отдавать на пришедший извне валидный интерфейс реализованный 3rd party.

3) Менять 3rd party — не могу.
Re: аггрегирование интерфейса
От: Vi2 Удмуртия http://www.adem.ru
Дата: 14.11.12 12:00
Оценка: 2 (1)
Здравствуйте, oncer, Вы писали:

O>есть ли возможность Аггрегировать средствами ATL отдельный интерфейс (реальный указатель на валидный интерефейс реализованный каким -либо классом) а не весь COM класс?


O>1) Есть Интерфейс IAint: кто-то (3rd party) создает COM обьект который имплементирует этот интерфейс и дергает мой метод передавая как параметр указатель на этот интерфейс.

O>2) Хочу аггрегировать этот интерфейс IAint своим CoClass-ом: хочу подсовывать свой COM обьект другим клиентам как якобы имплементирующий IAint (на самом деле все QueryInterface на IAint буду отдавать на пришедший извне валидный интерфейс реализованный 3rd party.
O>3) Менять 3rd party — не могу.

Агрегировать — нет, потому что агрегация появляется при создании COM обьекта, которому при создании передаётся внешний управляющий СОМ объект (параметр LPUNKNOWN pUnkOuter). И эти два объекта начинают работать как один объект. В твоём случае, СОМ объект уже создан, так что чуда не будет.

А вот делегировать — можно, но сложно эмулировать все методы интерфейса IAint.

Aggregate object
A COM object that is made up of one or more other COM objects. One object in the aggregate is designated the controlling object, which controls which interfaces in the aggregate are exposed and which are private. This controlling object has a special implementation of IUnknown called the controlling IUnknown. All objects in the aggregate must pass calls to IUnknown methods through the controlling IUnknown. See also Aggregation.

Aggregation
A composition technique for implementing COM objects. It allows you to build a new object by reusing one or more existing objects' interface implementations. The aggregate object chooses which interfaces to expose to clients, and the interfaces are exposed as if they were implemented by the aggregate object. Clients of the aggregate object communicate only with the aggregate object. See also Aggregate object. Contrast with Containment.

Containment
A composition technique for implementing COM objects. It allows one object to reuse some or all of the interface implementations of one or more other objects. The outer object acts as a client to the other objects, delegating implementation when it wishes to use the services of one of the contained objects. Contrast with Aggregation.

Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.