Re[3]: Проблема с компилятором интерфейсов
От: rus blood Россия  
Дата: 09.07.04 16:31
Оценка:
Здравствуйте, s_anatoli, Вы писали:

_>Должен признать, я неправильно сформулировал вопрос. На самом деле я не могу с помощью мастера реализовать методы событий в Connection Point. То есть, иногда срабатывает, а иногда нет. Не могу даже выяснить, когда же возникает проблема: не прослеживается зависимость от аргументов. Клас всё время перед попыткой очищаю от сгенерированного бесполезных определений (включение файла прокси-объекта, наследование класса от прокси, карту точек соединения), файл с описанием интерфейсов перекомпилирую. Вот, хотелось бы узнать, сталкивался ли кто-нибудь с подобной проблемой?


По порядку.

1. Создаешь ATL-объект, включаешь поддержку Connection Points.
2. Для события создается dispinterface.
3. В студии открываешь Class View и у интерфейса добавляешь метод.
4. В Class View у интефейса события добавляешь метод события.
5. Компилируем (чтоб cгенерить tlb).
6. В Class View у класс для COM-объект делаем Implement Connection Points.
7. На диалоге выбираем интерфейс события.
8. Готово.

В h-файле для idl будет пустая запись (без методов), потому что для события генерируется dispinterface. Это значит, что этот интерфейс работает через IDispatch (не дуальный), а соответственно, объявления методов (vtable) ему не нужны. В коде, который генерируется мастером во время выполнения Implement Connection Points, dispid-ы уже прописаны. Когда ты реализуешь sink используя SINK_ENTRY_EX, там тоже используятся явные dispid-ы событий.
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.