Здравствуйте VladD2, Вы писали:
VD>А IConnectonPoint и IConnectonPointContainer реализова?
VD>И вообще зачем такие сложности для этого же есть библиотеки?
VD>Так в этом случае тлбха включается в длл как ресурс. По сути это тоже самое, что и наличие отдельной tlb. Для COM+-а отдельное хранение tlb даже приимущество (в прокси входит только она).
1. Насчет TLB'шки — очень поучительная информация. Правда. А то я долго мучился — никак понять не мог — как это ссылки указывающие на TLB указывают на DLL. Зеленый, потому что :-))
2. IConnectionPoint и IConnectionPointContainer безусловно сделаны wizard'ом и включены в COM-обьект. И мой собственноручно сделанный sink к нему advis'иться совершенно успешно. То есть event'ы приходят в sink в функцию IDispatch::Invoke() (так как исходящий default source interface это dispinterface, и, соответсвенно, ATL'ный wizard сделал Fire_Methodxxx() таким, что он пользует через вызов Invoke()). Но дело-то в том что у меня проблема не в COM-обьекте, а в sink'е, т.е. в sink этот исходящий event приходит (в функцию IDispatch::Invoke()) нормально, это проверено, но дальше перенаправляться в соответсвующию метод с помощью DispInvoke() не хочет :-((
3. Библиотеки безусловно есть — вернее макросы для построения sink'ов (в MFC — BEGIN_EVENTSINK_MAP макрос, в ATL — BEGIN_EVENTSINK_MAP макрос). Простоя я пользую C++ Builder 3.0 и там такого нет :-))
P.S. Вообщем, похоже я зря затеял все это. Мне так кажется, что поскольку source interface моего COM-обьекта — это source dispinterface, и кажется тоже что DispInvoke() не работает с чистыми dispinterface'ми, а только в dual'ными. (А, как назло, ATL'шный wizard сделал исходящий source interface как dispinterface.) Попытаюсь переделать его как dual и посмотрю что получиться ...