diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c index 9a4eccd8cf2..138d2571041 100644 --- a/dlls/mshtml/htmllocation.c +++ b/dlls/mshtml/htmllocation.c @@ -64,20 +64,23 @@ static HRESULT get_url_components(HTMLLocation *This, URL_COMPONENTSW *url) return S_OK; } -#define HTMLLOCATION_THIS(iface) DEFINE_THIS(HTMLLocation, HTMLLocation, iface) +static inline HTMLLocation *impl_from_IHTMLLocation(IHTMLLocation *iface) +{ + return CONTAINING_RECORD(iface, HTMLLocation, IHTMLLocation_iface); +} static HRESULT WINAPI HTMLLocation_QueryInterface(IHTMLLocation *iface, REFIID riid, void **ppv) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); *ppv = NULL; if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); - *ppv = HTMLLOCATION(This); + *ppv = &This->IHTMLLocation_iface; }else if(IsEqualGUID(&IID_IHTMLLocation, riid)) { TRACE("(%p)->(IID_IHTMLLocation %p)\n", This, ppv); - *ppv = HTMLLOCATION(This); + *ppv = &This->IHTMLLocation_iface; }else if(dispex_query_interface(&This->dispex, riid, ppv)) { return *ppv ? S_OK : E_NOINTERFACE; } @@ -93,7 +96,7 @@ static HRESULT WINAPI HTMLLocation_QueryInterface(IHTMLLocation *iface, REFIID r static ULONG WINAPI HTMLLocation_AddRef(IHTMLLocation *iface) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); LONG ref = InterlockedIncrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); @@ -103,7 +106,7 @@ static ULONG WINAPI HTMLLocation_AddRef(IHTMLLocation *iface) static ULONG WINAPI HTMLLocation_Release(IHTMLLocation *iface) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); @@ -120,14 +123,14 @@ static ULONG WINAPI HTMLLocation_Release(IHTMLLocation *iface) static HRESULT WINAPI HTMLLocation_GetTypeInfoCount(IHTMLLocation *iface, UINT *pctinfo) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo); } static HRESULT WINAPI HTMLLocation_GetTypeInfo(IHTMLLocation *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); } @@ -135,7 +138,7 @@ static HRESULT WINAPI HTMLLocation_GetIDsOfNames(IHTMLLocation *iface, REFIID ri LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames, lcid, rgDispId); } @@ -144,14 +147,14 @@ static HRESULT WINAPI HTMLLocation_Invoke(IHTMLLocation *iface, DISPID dispIdMem REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); } static HRESULT WINAPI HTMLLocation_put_href(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); TRACE("(%p)->(%s)\n", This, debugstr_w(v)); @@ -165,7 +168,7 @@ static HRESULT WINAPI HTMLLocation_put_href(IHTMLLocation *iface, BSTR v) static HRESULT WINAPI HTMLLocation_get_href(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; WCHAR *buf = NULL, *url_path = NULL; HRESULT hres, ret; @@ -265,14 +268,14 @@ cleanup: static HRESULT WINAPI HTMLLocation_put_protocol(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_protocol(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; @@ -302,14 +305,14 @@ static HRESULT WINAPI HTMLLocation_get_protocol(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_host(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_host(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; @@ -348,14 +351,14 @@ static HRESULT WINAPI HTMLLocation_get_host(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_hostname(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_hostname(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; @@ -382,14 +385,14 @@ static HRESULT WINAPI HTMLLocation_get_hostname(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_port(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_port(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; @@ -419,14 +422,14 @@ static HRESULT WINAPI HTMLLocation_get_port(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_pathname(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_pathname(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; @@ -453,14 +456,14 @@ static HRESULT WINAPI HTMLLocation_get_pathname(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_search(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_search(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; HRESULT hres; const WCHAR hash[] = {'#',0}; @@ -491,14 +494,14 @@ static HRESULT WINAPI HTMLLocation_get_search(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_put_hash(IHTMLLocation *iface, BSTR v) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(v)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; const WCHAR hash[] = {'#',0}; DWORD hash_pos = 0; @@ -531,34 +534,32 @@ static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p) static HRESULT WINAPI HTMLLocation_reload(IHTMLLocation *iface, VARIANT_BOOL flag) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%x)\n", This, flag); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_replace(IHTMLLocation *iface, BSTR bstr) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(bstr)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_assign(IHTMLLocation *iface, BSTR bstr) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%s)\n", This, debugstr_w(bstr)); return E_NOTIMPL; } static HRESULT WINAPI HTMLLocation_toString(IHTMLLocation *iface, BSTR *String) { - HTMLLocation *This = HTMLLOCATION_THIS(iface); + HTMLLocation *This = impl_from_IHTMLLocation(iface); FIXME("(%p)->(%p)\n", This, String); return E_NOTIMPL; } -#undef HTMLLOCATION_THIS - static const IHTMLLocationVtbl HTMLLocationVtbl = { HTMLLocation_QueryInterface, HTMLLocation_AddRef, @@ -609,11 +610,11 @@ HRESULT HTMLLocation_Create(HTMLWindow *window, HTMLLocation **ret) if(!location) return E_OUTOFMEMORY; - location->lpHTMLLocationVtbl = &HTMLLocationVtbl; + location->IHTMLLocation_iface.lpVtbl = &HTMLLocationVtbl; location->ref = 1; location->window = window; - init_dispex(&location->dispex, (IUnknown*)HTMLLOCATION(location), &HTMLLocation_dispex); + init_dispex(&location->dispex, (IUnknown*)&location->IHTMLLocation_iface, &HTMLLocation_dispex); *ret = location; return S_OK; diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index f0be07bc7e9..3cbffea1932 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -124,7 +124,7 @@ static void release_children(HTMLWindow *This) static HRESULT get_location(HTMLWindow *This, HTMLLocation **ret) { if(This->location) { - IHTMLLocation_AddRef(HTMLLOCATION(This->location)); + IHTMLLocation_AddRef(&This->location->IHTMLLocation_iface); }else { HRESULT hres; @@ -249,7 +249,7 @@ static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface) if(This->location) { This->location->window = NULL; - IHTMLLocation_Release(HTMLLOCATION(This->location)); + IHTMLLocation_Release(&This->location->IHTMLLocation_iface); } if(This->screen) @@ -688,7 +688,7 @@ static HRESULT WINAPI HTMLWindow2_get_location(IHTMLWindow2 *iface, IHTMLLocatio if(FAILED(hres)) return hres; - *p = HTMLLOCATION(location); + *p = &location->IHTMLLocation_iface; return S_OK; } @@ -1986,7 +1986,7 @@ static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID hres = IDispatchEx_InvokeEx(&location->dispex.IDispatchEx_iface, DISPID_VALUE, lcid, wFlags, pdp, pvarRes, pei, pspCaller); - IHTMLLocation_Release(HTMLLOCATION(location)); + IHTMLLocation_Release(&location->IHTMLLocation_iface); return hres; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index ad3d2ae8c54..d50c3c3e717 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -246,7 +246,7 @@ typedef struct { struct HTMLLocation { DispatchEx dispex; - const IHTMLLocationVtbl *lpHTMLLocationVtbl; + IHTMLLocation IHTMLLocation_iface; LONG ref; @@ -630,8 +630,6 @@ struct HTMLDocumentNode { #define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackVtbl) #define BINDINFO(x) ((IInternetBindInfo*) &(x)->lpInternetBindInfoVtbl); -#define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl) - #define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl))) HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);