Re[4]: DispInvoke в реализации dispinterfac'а клиентом ..
От: timash  
Дата: 22.10.01 07:12
Оценка:
Здравствуйте VladD2, Вы писали:

Здравствуйте 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 и посмотрю что получиться ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.