diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 0c0fb0ac5ae..c0aef868eab 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1746,7 +1746,7 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv)
*ppv = &This->IOleObject_iface;
}else if(IsEqualGUID(&IID_IOleDocument, riid)) {
TRACE("(%p)->(IID_IOleDocument, %p)\n", This, ppv);
- *ppv = OLEDOC(This);
+ *ppv = &This->IOleDocument_iface;
}else if(IsEqualGUID(&IID_IOleDocumentView, riid)) {
TRACE("(%p)->(IID_IOleDocumentView, %p)\n", This, ppv);
*ppv = DOCVIEW(This);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 381939ec42e..fa9272243e5 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -352,7 +352,7 @@ struct HTMLDocument {
IPersistHistory IPersistHistory_iface;
IMonikerProp IMonikerProp_iface;
IOleObject IOleObject_iface;
- const IOleDocumentVtbl *lpOleDocumentVtbl;
+ IOleDocument IOleDocument_iface;
const IOleDocumentViewVtbl *lpOleDocumentViewVtbl;
const IOleInPlaceActiveObjectVtbl *lpOleInPlaceActiveObjectVtbl;
const IViewObjectExVtbl *lpViewObjectExVtbl;
@@ -626,7 +626,6 @@ struct HTMLDocumentNode {
#define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl)
#define HTMLWINDOW4(x) ((IHTMLWindow4*) &(x)->lpHTMLWindow4Vtbl)
-#define OLEDOC(x) ((IOleDocument*) &(x)->lpOleDocumentVtbl)
#define DOCVIEW(x) ((IOleDocumentView*) &(x)->lpOleDocumentViewVtbl)
#define OLEWIN(x) ((IOleWindow*) &(x)->lpOleInPlaceActiveObjectVtbl)
#define ACTOBJ(x) ((IOleInPlaceActiveObject*) &(x)->lpOleInPlaceActiveObjectVtbl)
diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c
index 2dafbf83449..7d63f5db04a 100644
--- a/dlls/mshtml/oleobj.c
+++ b/dlls/mshtml/oleobj.c
@@ -490,30 +490,33 @@ static const IOleObjectVtbl OleObjectVtbl = {
* IOleDocument implementation
*/
-#define OLEDOC_THIS(iface) DEFINE_THIS(HTMLDocument, OleDocument, iface)
+static inline HTMLDocument *impl_from_IOleDocument(IOleDocument *iface)
+{
+ return CONTAINING_RECORD(iface, HTMLDocument, IOleDocument_iface);
+}
static HRESULT WINAPI OleDocument_QueryInterface(IOleDocument *iface, REFIID riid, void **ppv)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
return htmldoc_query_interface(This, riid, ppv);
}
static ULONG WINAPI OleDocument_AddRef(IOleDocument *iface)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
return htmldoc_addref(This);
}
static ULONG WINAPI OleDocument_Release(IOleDocument *iface)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
return htmldoc_release(This);
}
static HRESULT WINAPI OleDocument_CreateView(IOleDocument *iface, IOleInPlaceSite *pIPSite, IStream *pstm,
DWORD dwReserved, IOleDocumentView **ppView)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
HRESULT hres;
TRACE("(%p)->(%p %p %d %p)\n", This, pIPSite, pstm, dwReserved, ppView);
@@ -544,7 +547,7 @@ static HRESULT WINAPI OleDocument_CreateView(IOleDocument *iface, IOleInPlaceSit
static HRESULT WINAPI OleDocument_GetDocMiscStatus(IOleDocument *iface, DWORD *pdwStatus)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
FIXME("(%p)->(%p)\n", This, pdwStatus);
return E_NOTIMPL;
}
@@ -552,13 +555,11 @@ static HRESULT WINAPI OleDocument_GetDocMiscStatus(IOleDocument *iface, DWORD *p
static HRESULT WINAPI OleDocument_EnumViews(IOleDocument *iface, IEnumOleDocumentViews **ppEnum,
IOleDocumentView **ppView)
{
- HTMLDocument *This = OLEDOC_THIS(iface);
+ HTMLDocument *This = impl_from_IOleDocument(iface);
FIXME("(%p)->(%p %p)\n", This, ppEnum, ppView);
return E_NOTIMPL;
}
-#undef OLEDOC_THIS
-
static const IOleDocumentVtbl OleDocumentVtbl = {
OleDocument_QueryInterface,
OleDocument_AddRef,
@@ -871,7 +872,7 @@ void HTMLDocument_LockContainer(HTMLDocumentObj *This, BOOL fLock)
void HTMLDocument_OleObj_Init(HTMLDocument *This)
{
This->IOleObject_iface.lpVtbl = &OleObjectVtbl;
- This->lpOleDocumentVtbl = &OleDocumentVtbl;
+ This->IOleDocument_iface.lpVtbl = &OleDocumentVtbl;
This->lpOleControlVtbl = &OleControlVtbl;
This->lpObjectWithSiteVtbl = &ObjectWithSiteVtbl;
This->IOleContainer_iface.lpVtbl = &OleContainerVtbl;