Среда выполнения Windows (WP 8) внепроцессный компонент и события создания / подписки

Я сделал внепроцессный компонент WR / WP8 с собственным фоновым потоком. Он обрабатывает стек SIP внутри и работает в фоновом потоке. Это модифицированный код из примера ChatterBox MSDN. https://code.msdn.microsoft.com/windowsapps/ChatterBox-VoIP-sample-app-b1e63b8b

В последние дни я добавляю делегатов для вызова событий из компонента. В C ++ / CX это:

  public delegate void OnLogMessage(Platform::String^ msg);

  public ref class Logger sealed
  {

  public:

    Logger();
    virtual ~Logger();

    void FlushLog();

    event OnLogMessage^ OnLogMessage;
  };

В коде C # есть подписка на событие:

BackgroundProcessController.Instance.Logger.OnLogMessage += new   IntTalk.OnLogMessage(mLogger_OnLogMessage);

Строится нормально.

Но во время отладки я вижу исключение:

A first chance exception of type 'System.Exception' occurred in mscorlib.ni.dll

Additional information: Interface not registered (Exception from HRESULT: 0x80040155)

If there is a handler for this exception, the program may be safely continued.

Создается DLL-заглушка прокси. Я проверил файлы .h / .c - они содержат код для событий.

Что может быть причиной этой проблемы?


person Dmytro    schedule 10.04.2015    source источник


Ответы (1)


При отладке того же кода в собственном режиме я заметил исключение «Интерфейс не зарегистрирован». Краткий поиск привел к этой ссылке:

Ошибка «Интерфейс не зарегистрирован» на выходе ATL- интерфейс обратного вызова процесса

Но я использую C ++ / CX, а не IDL вообще. Я проверил демонстрацию ChatterBox (которая была отправной точкой для моего приложения VoIP) - они вообще не используют события среды выполнения Windows.

Поэтому я прекратил свои попытки в этом направлении.

Другими возможными способами могут быть:

  • использовать очередь пользовательских структур событий, опрашивать и обрабатывать это событие со стороны C #.
  • использовать интерфейс, объявленный в C ++ / CX, в качестве обработчика событий. Реализуйте этот интерфейс на стороне C #. Однако не уверен, будет ли он перенаправлять события в основной поток пользовательского интерфейса.
person Dmytro    schedule 03.06.2015
comment
Несколько слов о втором подходе - события не маршалируются в основной поток пользовательского интерфейса. В любом случае для меня это приемлемо. - person Dmytro; 20.07.2015