Как подписаться на события нескольких объектов?
От: TarasKo Голландия  
Дата: 15.03.06 10:29
Оценка:
Допустим у меня есть COM-класс который наследуется от IDispEventImpl

class CPaneTopT : 
    ...
    public IDispEventImpl<1, T, &DIID__IRSSink, &LIBID_P4Lib, 
        P4TypeLibMajorVersion, P4TypeLibMinorVersion>,
    ...


и у меня есть вектор однотипных объектов каждый из которых может возбуждать события интерфейса _IRSSink. В своём классе CPaneTopT я описываю SINK_MAP

    ...
    BEGIN_SINK_MAP(T)
        SINK_ENTRY_EX(1, DIID__IRSSink, 1, onObjectsAdded)
        SINK_ENTRY_EX(1, DIID__IRSSink, 2, onObjectsRemoved)
        SINK_ENTRY_EX(1, DIID__IRSSink, 3, onObjectsReplaced)
        SINK_ENTRY_EX(1, DIID__IRSSink, 4, onAllObjectsRemoved)
        SINK_ENTRY_EX(1, DIID__IRSSink, 5, onObjectChanged)
    END_SINK_MAP()
    ...


И теперь мне хочеться подписать мой класс на события объектов в вышеназванном векторе. Просто вызывать последовательно DispEventAdvise для каждого объекта, не работает. там возникает assert, что cookie внутри IDispEventAdvise содержит корректное значение и сначало нужно отписаться от событий объекта. Есть конечно мысль вопользоваться AtlAdvise и хранить у себя вектор соответствующих cookie, но тогда мне кажется не будут вызываться методы описанные в SINK_MAP. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.