/* IEnumVARIANT support */ static HRESULT WINAPI enumvariant_QueryInterface( IEnumVARIANT *iface, REFIID riid, void** ppvObject ) { enumvariant *This = impl_from_IEnumVARIANT( iface ); TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); *ppvObject = NULL; if (IsEqualGUID( riid, &IID_IUnknown )) { if (This->own) *ppvObject = &This->IEnumVARIANT_iface; else return IUnknown_QueryInterface(This->outer, riid, ppvObject); } else if (IsEqualGUID( riid, &IID_IEnumVARIANT )) { *ppvObject = &This->IEnumVARIANT_iface; } else return IUnknown_QueryInterface(This->outer, riid, ppvObject); IEnumVARIANT_AddRef( iface ); return S_OK; }
static HRESULT WINAPI dict_enum_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **obj) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj); if (IsEqualIID(riid, &IID_IEnumVARIANT) || IsEqualIID(riid, &IID_IUnknown)) { *obj = iface; IEnumVARIANT_AddRef(iface); return S_OK; } else { WARN("interface not supported %s\n", debugstr_guid(riid)); *obj = NULL; return E_NOINTERFACE; } }
static HRESULT WINAPI enumvar_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **obj) { if (!riid || !obj) return E_INVALIDARG; TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj); if (IsEqualGUID(riid, &IID_IEnumVARIANT) || IsEqualGUID(riid, &IID_IUnknown)) { IEnumVARIANT_AddRef(iface); *obj = iface; return S_OK; } FIXME("interface %s is not implemented\n", debugstr_guid(riid)); *obj = NULL; return E_NOINTERFACE; }
/************************************************************************ * xmlelem_collection implementation of IEnumVARIANT. */ static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_QueryInterface( IEnumVARIANT *iface, REFIID riid, LPVOID *ppvObj) { xmlelem_collection *this = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%s %p)\n", this, debugstr_guid(riid), ppvObj); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IEnumVARIANT)) { *ppvObj = iface; IEnumVARIANT_AddRef(iface); return S_OK; } FIXME("interface %s not implemented\n", debugstr_guid(riid)); *ppvObj = NULL; return E_NOINTERFACE; }
HRESULT create_enumvariant(IUnknown *outer, BOOL own, const struct enumvariant_funcs *funcs, IEnumVARIANT **penum) { enumvariant *This; This = heap_alloc(sizeof(enumvariant)); if (!This) return E_OUTOFMEMORY; This->IEnumVARIANT_iface.lpVtbl = &EnumVARIANTVtbl; This->ref = 0; This->outer = outer; This->own = own; This->pos = 0; This->funcs = funcs; if (This->own) IUnknown_AddRef(This->outer); *penum = &This->IEnumVARIANT_iface; IEnumVARIANT_AddRef(*penum); return S_OK; }