问题:
未收到接收器(类)实现中列出的事件通知(来自 COM 对象 - 服务器)。
接收到一个事件通知( Event_one ),但未相应接收其他事件通知
如果更改顺序-在IDispatch::Invoke 中,即:
- if
Event_one
被交换到Event_two
thenEvent_two
收到通知,但Event_one
其他人相应地被忽略
- if
问题:
- 更好的实现方式,IDispatch::Invoke 还是 QI?
- 使用错误的逻辑或方法?
注意:
- 没有 MFC
- 无 ATL
- 纯 C++
- 使用消息循环:GetMessage()
- STA模型( Coinitialize() )
- 调用 IDispatch::Advise成功(来自调用S_OK的 HRESULT )
- 在上面之后,COM对象方法调用正常(带有接口指针)
- 单次致电 Advise
- MIDL 编译器生成的类型库
例如(示例):
IDispatch::Invoke的插图- 取自Sink 类:
HRESULT STDMETHODCALLTYPE Invoke(
{
//omitted parameters
// The riid parameter is always supposed to be IID_NULL
if (riid != IID_NULL)
return DISP_E_UNKNOWNINTERFACE;
if (pDispParams) //DISPID dispIdMember
{
switch (dispIdMember) {
case 1:
return Event_one();
case 2:
return Event_two();
case 3:
return Event_three();
default:
return E_NOTIMPL;
}
}
return E_NOTIMPL;
}
查询接口说明:
STDMETHOD (QueryInterface)(
//omitted parameters
{
if (iid == IID_IUnknown || iid == __uuidof(IEvents))
{
*ppvObject = (IEvents *)this;
} else {
*ppvObject = NULL;
return E_NOINTERFACE;
}
m_dwRefCount++;
return S_OK;
};