为什么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要求的.
      

  2.   

    楼主这句话理解错误了这句话只是说每次用Queryinterface查询IUnknown接口,每次返回指针必须相同
    并不是说每次都是返回IUnknown接口的指针