Допустим у меня есть 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. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
TK>И теперь мне хочеться подписать мой класс на события объектов в вышеназванном векторе. Просто вызывать последовательно DispEventAdvise для каждого объекта, не работает. там возникает assert, что cookie внутри IDispEventAdvise содержит корректное значение и сначало нужно отписаться от событий объекта. Есть конечно мысль вопользоваться AtlAdvise и хранить у себя вектор соответствующих cookie, но тогда мне кажется не будут вызываться методы описанные в SINK_MAP. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
Вполне реально подточить класс напильником чтобы подписаться к нескольким клиентам. Но у тебя может возникнуть ситуация когда тебе прийдётся отличать от какого из подписанных клиентов пришло событие, тогда без "подтачивания" источника событий не обойтись. Так что если у тебя не миллионы обьектов которые генерят события то проще забить на это дело и иметь по подписчику на обьект.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Left2, Вы писали:
TK>>И теперь мне хочеться подписать мой класс на события объектов в вышеназванном векторе. Просто вызывать последовательно DispEventAdvise для каждого объекта, не работает. там возникает assert, что cookie внутри IDispEventAdvise содержит корректное значение и сначало нужно отписаться от событий объекта. Есть конечно мысль вопользоваться AtlAdvise и хранить у себя вектор соответствующих cookie, но тогда мне кажется не будут вызываться методы описанные в SINK_MAP. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
L>Вполне реально подточить класс напильником чтобы подписаться к нескольким клиентам. Но у тебя может возникнуть ситуация когда тебе прийдётся отличать от какого из подписанных клиентов пришло событие, тогда без "подтачивания" источника событий не обойтись. Так что если у тебя не миллионы обьектов которые генерят события то проще забить на это дело и иметь по подписчику на обьект.
У меня не миллионы, однако сколько их там 5 или 10 заранее не известно.

Потому увы не могу отнаследоваться от 10 IDispEventImpl и радоваться жизни
А>У меня не миллионы, однако сколько их там 5 или 10 заранее не известно.
Потому увы не могу отнаследоваться от 10 IDispEventImpl и радоваться жизни
Ну а сделать 10 обьектов каждый из которых реализует IDispEventImpl?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, TarasKo, Вы писали:
TK>И теперь мне хочеться подписать мой класс на события объектов в вышеназванном векторе. Просто вызывать последовательно DispEventAdvise для каждого объекта, не работает. там возникает assert, что cookie внутри IDispEventAdvise содержит корректное значение и сначало нужно отписаться от событий объекта. Есть конечно мысль вопользоваться AtlAdvise и хранить у себя вектор соответствующих cookie, но тогда мне кажется не будут вызываться методы описанные в SINK_MAP. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
IDispEventMultiImplАвтор: asheff
Дата: 12.02.04
Здравствуйте, algol, Вы писали:
A>Здравствуйте, TarasKo, Вы писали:
TK>>И теперь мне хочеться подписать мой класс на события объектов в вышеназванном векторе. Просто вызывать последовательно DispEventAdvise для каждого объекта, не работает. там возникает assert, что cookie внутри IDispEventAdvise содержит корректное значение и сначало нужно отписаться от событий объекта. Есть конечно мысль вопользоваться AtlAdvise и хранить у себя вектор соответствующих cookie, но тогда мне кажется не будут вызываться методы описанные в SINK_MAP. (или всё-таки будут?, просто долго достаточно переделывать всё и хочу заранее быть уверенным, что всё будет работать) Вообщем кто сталкивался с такой ситуацией, может знаете как сделать так что бы было лучше всего
A>IDispEventMultiImplАвтор: asheff
Дата: 12.02.04
Здорово! Попробую его использовать. Спасибо!