Да, я забыл сказать с самого начала, что интерфейс, на котором я перехватываю события — дуальный.
Когда я загружаю tlb, я проверяю на то, что интерфейс, на котором нужно перехватывать события — дуальный, только тогда начинаю делать advise на нем.
PE>Это большой недостаток коннекшн поинтов. Обычно используется диспинтерфейс. PE>Обойти можно, но есть много телодвижений.
Если не секрет — то как? У меня был только один вариант, что сделать перехват native вызовов к интерфейсу типа того, как сделано в ATL _QIThunk( ставя свои обработчики на первые 1024 метода интерфейса) и переделывает его в вызовы диспатча, но мне показалось это каким-то корявым.
PE>Обычно все исходящие интерфейсы являются наследниками от IDispatch. PE>Если есть диспатч — работай с ним. Если нет — работай напрямую. PE>Все это можно выяснить из конкретного интерфейса.
PE>Обычно эта ответственность лежит на сервере. PE>IE, например, проверяет на IDispatch.
Да, я видел, но только не совсем понял зачем он это делает? Был у меня, конечно, вариант, что он просто делает запрос к IDispatch и отвечает в QueryInterface S_OK на IID_Event, если IID_Event дуальный интерфейс и я поддержал IDispatch.
PE>Ну и нужно делать дуальный интерфейс, если в IID_Event засовываешь в QueryInterface.