Неожиданный вызов IConnectionPointImpl :: Unadvise в Windows Embedded Compact 7

У нас есть более крупное программное обеспечение, работающее на Win CE6 без проблем. Основные функции реализованы в DLL-библиотеке COM-сервера, которая обеспечивает точки подключения. Клиентская программа COM регистрирует обработчики событий для точек подключения при запуске программы, чтобы получать уведомления о состоянии и т. Д. При выходе из программы она отменяет регистрацию обработчиков, вызывая соответствующийIConnectionPointImpl::Unadvise методы.

Теперь мы переносим программу для работы на Win EC 7. Новый пакет поддержки платы (BSP) для Win EC 7 работает хорошо. Существуют также разные версии с разными параметрами, созданные в разное время из разных источников от Microsoft, но наше программное обеспечение всегда показывает одну и ту же проблему.

При запуске программы, ~10 с после запуска, IConnectionPointImpl::Unadviseнеожиданно вызывается для всех зарегистрированных обработчиков событий. В нашем исходном коде есть только один метод, который вызываетIConnectionPointImpl::Unadvise и это точно не выполняется.

Проблема появляется ~95%, но иногда программа запускается и работает без проблем. Мы не можем использовать отладчик из-за размера программы, производительность очень низкая.

Мы предполагаем, что среда выполнения COM вызывает IConnectionPointImpl::Unadviseметоды по некоторым причинам. Но мы не знаем, как этого избежать.

Кто-нибудь заметил такую ​​же проблему? Есть ли решение / обходной путь? Спасибо.

1 ответ

Итак, мы наконец нашли, как решить эту проблему.

Мы убираем нашу зависимость от MarshalByReObject и заменить его правильной реализацией ISerializable.

Это позволяет нам правильно загружать внутри пользовательского AppDomain нашу сборку, и события больше не теряются.

Но это имеет побочный эффект для пути, по которому загружается сборочный файл конфигурации. Чтобы решить эту проблему, мы также реализуемAppDomain.AssemblyResolve событие, которое позволяет перенаправить загрузку в нужное место.

Я надеюсь это тебе поможет;)

Другие вопросы по тегам