Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ COM事件处理的最快方式(性能方面)_C++_Visual Studio 2010_Com_Event Handling_Atl - Fatal编程技术网

C++ COM事件处理的最快方式(性能方面)

C++ COM事件处理的最快方式(性能方面),c++,visual-studio-2010,com,event-handling,atl,C++,Visual Studio 2010,Com,Event Handling,Atl,我有一个带有dispinterface“u QuoteEvents”的COM Quote类。对于事件处理,我使用以下说明: 从IDispEventSimpleImpl派生的事件接收器类: class CProxyQuoteEvents : public IDispEventSimpleImpl<SINK_ID, CProxyQuoteEvents, &__uuidof(_IQuoteEvents)> { .... } 所有这些构造对我来说都很好(事件处理如预期),但我想知道

我有一个带有dispinterface“u QuoteEvents”的COM Quote类。对于事件处理,我使用以下说明:

从IDispEventSimpleImpl派生的事件接收器类:

class CProxyQuoteEvents : public IDispEventSimpleImpl<SINK_ID, CProxyQuoteEvents, &__uuidof(_IQuoteEvents)> {
....
}
所有这些构造对我来说都很好(事件处理如预期),但我想知道还有其他更快的解决方案吗?如果避免ATL会更快,也许我可以在没有ATL的情况下意识到这一点

另外,请解释两者之间是否存在差异

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)>
class ATL\u NO\u VTABLE CSimple:
公共CComObjectRootEx,
公共课程,
公共场所,
公共IDispEventSimpleImpl

类CSimple:
公共IDispEventSimpleImpl

使用此代码段发送事件的最消耗部分是使用
IDispatch::Invoke
进行传递,它完全位于COM服务器端(特别是当COM服务器位于不同的进程或单元中时)。除非您知道这个COM服务器提供了一种不同的事件调度方法,否则您所能做的很少,而且它在延迟方面更好

另外,请解释一下……之间是否存在差异。。。IDispEventSimpleImpl

没有区别。在这两种情况下都是
IDispEventSimpleImpl
,它是接收调用的类
IDispEventSimpleImpl
(与许多其他ATL类不同)不需要您在真正的COM对象类上实现它,任何类都可以

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)>
class CSimple :    
public IDispEventSimpleImpl</*nID =*/ 1, CSimple, &__uuidof(Word::ApplicationEvents)>