QueryInterface IID_IDispatch

来源:互联网 发布:淘宝达人怎么到1w粉丝 编辑:程序博客网 时间:2024/05/16 07:31
STDMETHODIMP CMathFactory::QueryInterface(REFIID riid,void ** ppv){*ppv=NULL;if(riid==IID_IUnknown||riid==IID_IClassFactory)//这儿不改变也可以!//if(riid==IID_IUnknown||riid==IID_IClassFactory || riid == IID_IDispatch)//改变{*ppv=static_cast<IClassFactory *>(this);reinterpret_cast<IUnknown*>(*ppv)->AddRef();return S_OK;}elsereturn (*ppv=0),E_NOINTERFACE;}STDMETHODIMP CMath::QueryInterface(REFIID riid, void **ppv){//这里这是实现dynamic_cast的功能,但由于dynamic_cast与编译器相关。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 if(riid == IID_IDispatch) //*ppv = static_cast<ISimpleMath *>(this);//方一 *ppv = static_cast<IAdvancedMath *>(this);//方二,都可以!else {*ppv = 0;return E_NOINTERFACE;}reinterpret_cast<IUnknown *>(*ppv)->AddRef();//这里要这样是因为引用计数是针对组件的return S_OK;}

原创粉丝点击