描述:
为什么Queryinterface说返回的IUnknown指针总是相同的 ???????
HRESULT __stdcall QueryInterface (const IID&iid,void **ppv);
为什么说总是返回IUnknown指针????不明,请教大家!谢谢 因为
我进到QueryInterface()函数中去看时,看到的是
if(riid == IID_ISimpleMath)
*ppv = static_cast <ISimpleMath * >(this);
else if(riid == IID_IAdvancedMath)
*ppv = static_cast <IAdvancedMath * >(this);
else if(riid == IID_IUnknown)
*ppv = static_cast <ISimpleMath * >(this);
else {
*ppv = 0;
return E_NOINTERFACE;
}
而不是全是IUnknown指针,有的是ISimpleMath接口有的是IAdvancedMath接口,怎么说返回全是IUnknown指针呢?而且都没出现IUnknown指针,所以请大家指教,谢谢!!!
解决方案1:
因为ISimpleMath也是从IUnknown继承来的, IAdvanceMath也是从IUnknown继承来的, 所以把this指针cast到ISimpleMath即可, 如果Cast到IUnknown可能会出现二义错误.
COM要求对象返回的IUnknown在生命期中是不变的, 来确保对象的实体身份, 是COM要求的.
楼主这句话理解错误了
这句话只是说每次用Queryinterface查询IUnknown接口,每次返回指针必须相同
并不是说每次都是返回IUnknown接口的指针
参数返回的是相应接口的指针.
您可能想查找下面的文章:
- 如何修改ATL自动生成的COM方法呢?比如QueryInterface,CreateInstence
- 重写QueryInterface,AddRef,Release应该注意些什么?我这段代码怎么总是有问题。
- 使用COM组件时,QueryInterface调用失败是什么原因
- tempRs->QueryInterface__uuidof_Recordset,voidm_Recordset编译没错,vb调用报自动化错误
- 在线等待关于queryinterface的问题
- 关于QueryInterface,求助啊!
- 奇怪:成功激活也能成功调用,为什么queryinterface查询第二个接口报告“拒绝访问”?
- 为什么Queryinterface返回的IUnknown指针总是相同的
- 求QueryInterface例子
- 请问QueryInterface有什么用呢?