diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 13319cc157..9e68461e70 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -58,6 +58,7 @@ static REFIID tid_ids[] = {
&DIID_DispHTMLElementCollection,
&DIID_DispHTMLInputElement,
&DIID_DispHTMLOptionElement,
+ &DIID_DispHTMLStyle,
&DIID_DispHTMLUnknownElement,
&DIID_DispHTMLWindow2,
&IID_IHTMLCommentElement,
@@ -74,6 +75,7 @@ static REFIID tid_ids[] = {
&IID_IHTMLElementCollection,
&IID_IHTMLInputElement,
&IID_IHTMLOptionElement,
+ &IID_IHTMLStyle,
&IID_IHTMLWindow2,
&IID_IHTMLWindow3,
&IID_IOmNavigator
diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c
index a955a56e3a..01aa391d14 100644
--- a/dlls/mshtml/htmlstyle.c
+++ b/dlls/mshtml/htmlstyle.c
@@ -33,6 +33,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
typedef struct {
+ DispatchEx dispex;
const IHTMLStyleVtbl *lpHTMLStyleVtbl;
LONG ref;
@@ -40,7 +41,7 @@ typedef struct {
nsIDOMCSSStyleDeclaration *nsstyle;
} HTMLStyle;
-#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl);
+#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl)
static const WCHAR attrBackgroundColor[] =
{'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
@@ -213,6 +214,9 @@ static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, v
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = HTMLSTYLE(This);
+ }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
+ TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
+ *ppv = DISPATCHEX(&This->dispex);
}else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv);
*ppv = HTMLSTYLE(This);
@@ -1841,6 +1845,16 @@ static const IHTMLStyleVtbl HTMLStyleVtbl = {
HTMLStyle_toString
};
+static dispex_static_data_t HTMLStyle_dispex = {
+ NULL,
+ DispHTMLStyle_tid,
+ NULL,
+ {
+ IHTMLStyle_tid,
+ 0
+ }
+};
+
IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
{
HTMLStyle *ret = heap_alloc(sizeof(HTMLStyle));
@@ -1851,5 +1865,7 @@ IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
nsIDOMCSSStyleDeclaration_AddRef(nsstyle);
+ init_dispex(&ret->dispex, (IUnknown*)HTMLSTYLE(ret), &HTMLStyle_dispex);
+
return HTMLSTYLE(ret);
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 78f7e05464..8ec0497232 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -68,6 +68,7 @@ typedef enum {
DispHTMLElementCollection_tid,
DispHTMLInputElement_tid,
DispHTMLOptionElement_tid,
+ DispHTMLStyle_tid,
DispHTMLUnknownElement_tid,
DispHTMLWindow2_tid,
IHTMLCommentElement_tid,
@@ -84,6 +85,7 @@ typedef enum {
IHTMLElementCollection_tid,
IHTMLInputElement_tid,
IHTMLOptionElement_tid,
+ IHTMLStyle_tid,
IHTMLWindow2_tid,
IHTMLWindow3_tid,
IOmNavigator_tid,
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index f1c2548fc3..1039ab5ad0 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -1290,6 +1290,8 @@ static void test_default_style(IHTMLStyle *style)
BSTR str;
HRESULT hres;
+ test_disp((IUnknown*)style, &DIID_DispHTMLStyle);
+
str = (void*)0xdeadbeef;
hres = IHTMLStyle_get_fontFamily(style, &str);
ok(hres == S_OK, "get_fontFamily failed: %08x\n", hres);