2013-07-11 1 views
0

J'ai la classe COM Quote avec dispinterface _QuoteEvents. Pour la gestion des événements que j'utilise les instructions suivantes:Le moyen le plus rapide (en termes de performances) pour la gestion des événements COM

classe de puits d'événements, dérivés de IDispEventSimpleImpl:

class CProxyQuoteEvents : public IDispEventSimpleImpl<SINK_ID, CProxyQuoteEvents, &__uuidof(_IQuoteEvents)> { 
.... 
} 

initialisation de la bibliothèque COM et des objets de création et de conseil:

CProxyQuoteEvents g_quoteEventsProxy; 
QuotePtr g_quote; 

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 
g_quote.CreateInstance(__uuidof(Quote)); 
g_quoteEventsProxy.DispEventAdvise(g_quote, &__uuidof(_IQuoteEvents)); 

Toutes ces constructions fonctionne bien pour moi (les événements se déroulent comme prévu), mais je veux savoir s'il existe une autre solution plus rapide? Peut-être que je peux le réaliser sans ATL si éviter ATL sera plus rapide?

Aussi s'il vous plaît expliquer s'il y a une différence entre

class ATL_NO_VTABLE CSimple : 
public CComObjectRootEx<CComSingleThreadModel>, 
public CComCoClass<CSimple, &CLSID_Simple>, 
public IDispatchImpl<ISwitch, &IID_ISwitch, &LIBID_DISPEVENTLib>, 
public IDispEventSimpleImpl</*nID =*/ 1, CSimple, &__uuidof(Word::ApplicationEvents)> 

et

class CSimple :  
public IDispEventSimpleImpl</*nID =*/ 1, CSimple, &__uuidof(Word::ApplicationEvents)> 

Répondre

2

La partie la plus consommer des événements dispatching avec cet extrait de code est la livraison à l'aide IDispatch::Invoke et il est tout à fait sur le serveur COM côté (en particulier si le serveur COM réside dans un processus différent, ou appartement). Il y a peu de choses que vous pouvez faire à moins d'être conscient d'une méthode de répartition d'événements différente offerte par ce serveur COM, et c'est mieux en termes de latence.

également s'il vous plaît expliquer s'il y a une différence entre ... IDispEventSimpleImpl

Il n'y a pas de différence. Dans les deux cas, c'est IDispEventSimpleImpl et c'est la classe qui reçoit les appels. IDispEventSimpleImpl (contrairement à beaucoup d'autres classes ATL) n'a pas besoin de vous pour l'implémenter sur la vraie classe d'objet COM, n'importe quelle classe le fera.

Questions connexes