2017-01-19 3 views
1

Я пытаюсь обрабатывать COM-события с сервера C# на клиент C++. Я могу использовать сервер regfree, но мои события больше не работают.Как обрабатывать COM-события regfree?

Раньше с регистрацией события обрабатывались клиентом с помощью IDispEventImpl от ATL.

Я не смог найти статей, непосредственно обращающихся к этому вопросу, но я видел предложение о том, что IConnectionPoint по своей сути не требует регистрации.

Я также видел некоторое предложение, что IDispEventSimpleImpl может работать regfree.

ответ

2

IDispEventImpl требует доступа к библиотеке типов. Вам необходимо включить ссылку на ваш сервер манифеста, так что он может быть загружен в контекст активации:

<file name="mydll.tlb"> 
    <typelib 
     tlbid="{TLBID}" 
     version="1.0" 
     helpdir="" 
     flags="hasdiskimage"/> 
</file> 

Ваш клиент слив должен быть объявлен с TYPELIB ID, а также:

class CMySink: public IDispEventImpl<1, CMySink, &IID_IEvent, &TLBID, 1, 0> 

В качестве альтернативы вы также можете реализовать IDispEventSimpleImpl, который работает без библиотеки типов.