diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 05b13fc47f1..3d6de2251f7 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -48,6 +48,8 @@ static HRESULT WINAPI HTMLDOMAttribute_QueryInterface(IHTMLDOMAttribute *iface, }else if(IsEqualGUID(&IID_IHTMLDOMAttribute, riid)) { TRACE("(%p)->(IID_IHTMLDOMAttribute %p)\n", This, ppv); *ppv = &This->IHTMLDOMAttribute_iface; + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }else { WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); *ppv = NULL; @@ -77,6 +79,7 @@ static ULONG WINAPI HTMLDOMAttribute_Release(IHTMLDOMAttribute *iface) if(!ref) { nsIDOMAttr_Release(This->nsattr); + release_dispex(&This->dispex); heap_free(This); } @@ -86,16 +89,14 @@ static ULONG WINAPI HTMLDOMAttribute_Release(IHTMLDOMAttribute *iface) static HRESULT WINAPI HTMLDOMAttribute_GetTypeInfoCount(IHTMLDOMAttribute *iface, UINT *pctinfo) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo); } static HRESULT WINAPI HTMLDOMAttribute_GetTypeInfo(IHTMLDOMAttribute *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); } static HRESULT WINAPI HTMLDOMAttribute_GetIDsOfNames(IHTMLDOMAttribute *iface, REFIID riid, @@ -103,8 +104,8 @@ static HRESULT WINAPI HTMLDOMAttribute_GetIDsOfNames(IHTMLDOMAttribute *iface, R LCID lcid, DISPID *rgDispId) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames, + lcid, rgDispId); } static HRESULT WINAPI HTMLDOMAttribute_Invoke(IHTMLDOMAttribute *iface, DISPID dispIdMember, @@ -112,8 +113,8 @@ static HRESULT WINAPI HTMLDOMAttribute_Invoke(IHTMLDOMAttribute *iface, DISPID d VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - FIXME("%p\n", This); - return E_NOTIMPL; + return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BSTR *p) @@ -158,6 +159,17 @@ static const IHTMLDOMAttributeVtbl HTMLDOMAttributeVtbl = { HTMLDOMAttribute_get_specified }; +static const tid_t HTMLDOMAttribute_iface_tids[] = { + IHTMLDOMAttribute_tid, + 0 +}; +static dispex_static_data_t HTMLDOMAttribute_dispex = { + NULL, + DispHTMLDOMAttribute_tid, + 0, + HTMLDOMAttribute_iface_tids +}; + HRESULT HTMLDOMAttribute_Create(HTMLDocumentNode *doc, nsIDOMAttr *nsattr, HTMLDOMAttribute **attr) { HTMLDOMAttribute *ret; @@ -172,6 +184,9 @@ HRESULT HTMLDOMAttribute_Create(HTMLDocumentNode *doc, nsIDOMAttr *nsattr, HTMLD nsIDOMAttr_AddRef(nsattr); ret->nsattr = nsattr; + init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLDOMAttribute_iface, + &HTMLDOMAttribute_dispex); + *attr = ret; return S_OK; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index dc99fbf7665..e69949e1005 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -74,6 +74,7 @@ typedef struct event_target_t event_target_t; XDIID(DispHTMLCommentElement) \ XDIID(DispHTMLCurrentStyle) \ XDIID(DispHTMLDocument) \ + XDIID(DispHTMLDOMAttribute) \ XDIID(DispHTMLDOMTextNode) \ XDIID(DispHTMLElementCollection) \ XDIID(DispHTMLEmbed) \ @@ -111,6 +112,7 @@ typedef struct event_target_t event_target_t; XIID(IHTMLDocument3) \ XIID(IHTMLDocument4) \ XIID(IHTMLDocument5) \ + XIID(IHTMLDOMAttribute) \ XIID(IHTMLDOMChildrenCollection) \ XIID(IHTMLDOMNode) \ XIID(IHTMLDOMNode2) \ @@ -740,6 +742,7 @@ HRESULT create_nselem(HTMLDocumentNode*,const WCHAR*,nsIDOMHTMLElement**); HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode*,nsIDOMNode*,HTMLDOMNode**); typedef struct { + DispatchEx dispex; IHTMLDOMAttribute IHTMLDOMAttribute_iface; LONG ref;