static HRESULT WINAPI xmlnodelist_QueryInterface( IXMLDOMNodeList *iface, REFIID riid, void** ppvObject ) { xmlnodelist *This = impl_from_IXMLDOMNodeList( iface ); TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); #ifdef __REACTOS__ if (!ppvObject) { /* NOTE: Interface documentation for IUnknown explicitly states * this case should return E_POINTER. Empirical data proves * MS violates this contract and instead return E_INVALIDARG. */ return E_INVALIDARG; } #endif if ( IsEqualGUID( riid, &IID_IUnknown ) || IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IXMLDOMNodeList ) ) { *ppvObject = iface; } else if (IsEqualGUID( riid, &IID_IEnumVARIANT )) { if (!This->enumvariant) { HRESULT hr = create_enumvariant((IUnknown*)iface, FALSE, &nodelist_enumvariant, &This->enumvariant); if (FAILED(hr)) return hr; } return IEnumVARIANT_QueryInterface(This->enumvariant, &IID_IEnumVARIANT, ppvObject); } else if (dispex_query_interface(&This->dispex, riid, ppvObject)) { return *ppvObject ? S_OK : E_NOINTERFACE; } else { TRACE("interface %s not implemented\n", debugstr_guid(riid)); *ppvObject = NULL; return E_NOINTERFACE; } IXMLDOMNodeList_AddRef( iface ); return S_OK; }
static HRESULT create_enumvariant(IXMLDOMSelection *selection, BOOL own, IUnknown **penum) { enumvariant *This; This = heap_alloc(sizeof(enumvariant)); if (!This) return E_OUTOFMEMORY; This->IEnumVARIANT_iface.lpVtbl = &EnumVARIANTVtbl; This->ref = 0; This->selection = selection; This->own = own; This->pos = 0; if (This->own) IXMLDOMSelection_AddRef(selection); return IEnumVARIANT_QueryInterface(&This->IEnumVARIANT_iface, &IID_IUnknown, (void**)penum); }
static HRESULT WINAPI domselection_QueryInterface( IXMLDOMSelection *iface, REFIID riid, void** ppvObject ) { domselection *This = impl_from_IXMLDOMSelection( iface ); TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject); if(!ppvObject) return E_INVALIDARG; if ( IsEqualGUID( riid, &IID_IUnknown ) || IsEqualGUID( riid, &IID_IXMLDOMNodeList ) || IsEqualGUID( riid, &IID_IXMLDOMSelection )) { *ppvObject = &This->IXMLDOMSelection_iface; } else if (IsEqualGUID( riid, &IID_IEnumVARIANT )) { if (!This->enumvariant) { HRESULT hr = create_enumvariant(iface, FALSE, (IUnknown**)&This->enumvariant); if (FAILED(hr)) return hr; } return IEnumVARIANT_QueryInterface(This->enumvariant, &IID_IEnumVARIANT, ppvObject); } else if (dispex_query_interface(&This->dispex, riid, ppvObject)) { return *ppvObject ? S_OK : E_NOINTERFACE; } else { TRACE("interface %s not implemented\n", debugstr_guid(riid)); *ppvObject = NULL; return E_NOINTERFACE; } IXMLDOMSelection_AddRef( iface ); return S_OK; }
static HRESULT WINAPI xmlnodemap_QueryInterface( IXMLDOMNamedNodeMap *iface, REFIID riid, void** ppvObject ) { xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface ); TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject); if( IsEqualGUID( riid, &IID_IUnknown ) || IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IXMLDOMNamedNodeMap ) ) { *ppvObject = iface; } else if (IsEqualGUID( riid, &IID_IEnumVARIANT )) { if (!This->enumvariant) { HRESULT hr = create_enumvariant((IUnknown*)iface, FALSE, &nodemap_enumvariant, &This->enumvariant); if (FAILED(hr)) return hr; } return IEnumVARIANT_QueryInterface(This->enumvariant, &IID_IEnumVARIANT, ppvObject); } else if (dispex_query_interface(&This->dispex, riid, ppvObject)) { return *ppvObject ? S_OK : E_NOINTERFACE; } else if( IsEqualGUID( riid, &IID_ISupportErrorInfo )) { *ppvObject = &This->ISupportErrorInfo_iface; } else { TRACE("interface %s not implemented\n", debugstr_guid(riid)); *ppvObject = NULL; return E_NOINTERFACE; } IXMLDOMNamedNodeMap_AddRef( iface ); return S_OK; }