static HRESULT WINAPI dictionary_QueryInterface(IDictionary *iface, REFIID riid, void **obj) { dictionary *This = impl_from_IDictionary(iface); TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj); *obj = NULL; if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDispatch) || IsEqualIID(riid, &IID_IDictionary)) { *obj = &This->IDictionary_iface; } else if ( IsEqualGUID( riid, &IID_IDispatchEx )) { TRACE("Interface IDispatchEx not supported - returning NULL\n"); *obj = NULL; return E_NOINTERFACE; } else if ( IsEqualGUID( riid, &IID_IObjectWithSite )) { TRACE("Interface IObjectWithSite not supported - returning NULL\n"); *obj = NULL; return E_NOINTERFACE; } else { WARN("interface %s not implemented\n", debugstr_guid(riid)); return E_NOINTERFACE; } IDictionary_AddRef(iface); return S_OK; }
static HRESULT create_dict_enum(dictionary *dict, IUnknown **ret) { struct dictionary_enum *This; *ret = NULL; This = heap_alloc(sizeof(*This)); if (!This) return E_OUTOFMEMORY; This->IEnumVARIANT_iface.lpVtbl = &dictenumvtbl; This->ref = 1; This->cur = list_head(&dict->pairs); list_add_tail(&dict->notifier, &This->notify); This->dict = dict; IDictionary_AddRef(&dict->IDictionary_iface); *ret = (IUnknown*)&This->IEnumVARIANT_iface; return S_OK; }