2017-01-19 1 views
1

J'essaie de gérer les événements COM à partir d'un serveur C# vers un client C++. Je suis capable d'utiliser le regfree du serveur mais mes événements ne fonctionnent plus.Comment gérer les événements COM regfree?

Auparavant, avec l'enregistrement, les événements étaient gérés dans le client via IDispEventImpl à partir de l'ATL.

Je n'ai pas été en mesure de trouver des articles traitant directement de cela, mais j'ai vu une suggestion que IConnectionPoint ne nécessite pas d'enregistrement par nature.

J'ai également vu une suggestion que IDispEventSimpleImpl peut fonctionner en regfree.

Répondre

2

IDispEventImpl nécessite l'accès à une bibliothèque de types. Vous devrez inclure une référence dans votre manifeste de serveur, de sorte qu'il peut être chargé dans le contexte d'activation:

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

Votre évier client doit être déclarée avec l'ID typelib ainsi:

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

Vous pouvez également implémenter IDispEventSimpleImpl, qui fonctionne sans bibliothèque de types.