Здравствуйте, помогите разобраться со следующей проблемой.
Есть dll-ка с двумя ActiveX-объектами, которые генерируют события (Connection Point). Все хорошо работает, если в качестве контейнера использовать Internet Explorer.
В той же dll-ке находятся два ActiveX-контейнера (по одному на каждый объект). Один из них работает отлично. Во втором при генерации события с более, чем одним аргументом, эти аргументы портятся. Такое чувство, что происходит сдвиг стека байт на 8. При генерации события с одним аргументом все работает.
Может, кто сталкивался с подобным явлением?
Заранее спасибо.
Здравствуйте, Аноним, Вы писали:
А>Есть dll-ка с двумя ActiveX-объектами, которые генерируют события (Connection Point). Все хорошо работает, если в качестве контейнера использовать Internet Explorer.
А>В той же dll-ке находятся два ActiveX-контейнера (по одному на каждый объект). Один из них работает отлично. Во втором при генерации события с более, чем одним аргументом, эти аргументы портятся. Такое чувство, что происходит сдвиг стека байт на 8. При генерации события с одним аргументом все работает.
Может это — Q288724:
An Active Template Library (ATL) class derived from IDispEventSimpleImpl that handles events from an OLE automation server may fail or exhibit unexpected behavior when an event is processed that has more than one argument. The arguments are in reverse order compared with the type library specification when they are passed to the handler function of this class.
Здравствуйте, algol, Вы писали:
A>Может это — Q288724:
A>A>An Active Template Library (ATL) class derived from IDispEventSimpleImpl that handles events from an OLE automation server may fail or exhibit unexpected behavior when an event is processed that has more than one argument. The arguments are in reverse order compared with the type library specification when they are passed to the handler function of this class.
Аргументы идут не в обратном порядке. Самое непонятное то, что контейнеры почти идентичные. И в том, и в другом есть генерация событий с несколькими аргументами. Но в первом все происходит корректно, а во втором — нет. При чем в вызове генератора события CProxy_IMyClassEvents::Fire_OnMethod аргументы передаются правильно, копируются в массив CComVariant тоже правильно, а на стороне клиента получаются уже испорченные. Как с этим бороться???