msxml3: Fix support for IXMLDOMDocument3.
diff --git a/dlls/msxml3/dispex.c b/dlls/msxml3/dispex.c
index bcf528d..d71fb04 100644
--- a/dlls/msxml3/dispex.c
+++ b/dlls/msxml3/dispex.c
@@ -117,6 +117,7 @@
{ &IID_IXMLDOMComment, LibXml2 },
{ &IID_IXMLDOMDocument, LibXml2 },
{ &IID_IXMLDOMDocument2, LibXml2 },
+ { &IID_IXMLDOMDocument3, LibXml2 },
{ &IID_IXMLDOMDocumentFragment, LibXml2 },
{ &IID_IXMLDOMDocumentType, LibXml2 },
{ &IID_IXMLDOMElement, LibXml2 },
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 2f67781..7d51255 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -813,6 +813,7 @@
IXMLDOMNode_tid,
IXMLDOMDocument_tid,
IXMLDOMDocument2_tid,
+ IXMLDOMDocument3_tid,
0
};
@@ -926,13 +927,10 @@
UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo )
{
domdoc *This = impl_from_IXMLDOMDocument3( iface );
- HRESULT hr;
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
- hr = get_typeinfo(IXMLDOMDocument2_tid, ppTInfo);
-
- return hr;
+ return get_typeinfo(IXMLDOMDocument3_tid, ppTInfo);
}
static HRESULT WINAPI domdoc_GetIDsOfNames(
@@ -953,7 +951,7 @@
if(!rgszNames || cNames == 0 || !rgDispId)
return E_INVALIDARG;
- hr = get_typeinfo(IXMLDOMDocument2_tid, &typeinfo);
+ hr = get_typeinfo(IXMLDOMDocument3_tid, &typeinfo);
if(SUCCEEDED(hr))
{
hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
@@ -982,7 +980,7 @@
TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- hr = get_typeinfo(IXMLDOMDocument2_tid, &typeinfo);
+ hr = get_typeinfo(IXMLDOMDocument3_tid, &typeinfo);
if(SUCCEEDED(hr))
{
hr = ITypeInfo_Invoke(typeinfo, &This->IXMLDOMDocument3_iface, dispIdMember, wFlags,
@@ -2378,7 +2376,7 @@
case VT_UNKNOWN:
{
IUnknown *pUnk = V_UNKNOWN(&destination);
- IXMLDOMDocument2 *document;
+ IXMLDOMDocument3 *document;
IStream *stream;
ret = IUnknown_QueryInterface(pUnk, &IID_IXMLDOMDocument3, (void**)&document);
@@ -3011,7 +3009,7 @@
return E_NOTIMPL;
}
-static const struct IXMLDOMDocument3Vtbl domdoc_vtbl =
+static const struct IXMLDOMDocument3Vtbl XMLDOMDocument3Vtbl =
{
domdoc_QueryInterface,
domdoc_AddRef,
@@ -3412,14 +3410,13 @@
};
static const tid_t domdoc_iface_tids[] = {
- IXMLDOMNode_tid,
- IXMLDOMDocument_tid,
- IXMLDOMDocument2_tid,
+ IXMLDOMDocument3_tid,
0
};
+
static dispex_static_data_t domdoc_dispex = {
NULL,
- IXMLDOMDocument2_tid,
+ IXMLDOMDocument3_tid,
NULL,
domdoc_iface_tids
};
@@ -3432,7 +3429,7 @@
if( !doc )
return E_OUTOFMEMORY;
- doc->IXMLDOMDocument3_iface.lpVtbl = &domdoc_vtbl;
+ doc->IXMLDOMDocument3_iface.lpVtbl = &XMLDOMDocument3Vtbl;
doc->IPersistStreamInit_iface.lpVtbl = &xmldoc_IPersistStreamInit_VTable;
doc->IObjectWithSite_iface.lpVtbl = &domdocObjectSite;
doc->IObjectSafety_iface.lpVtbl = &domdocObjectSafetyVtbl;
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index 65f2834..10067a6 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -44,6 +44,7 @@
IXMLDOMComment_tid,
IXMLDOMDocument_tid,
IXMLDOMDocument2_tid,
+ IXMLDOMDocument3_tid,
IXMLDOMDocumentFragment_tid,
IXMLDOMDocumentType_tid,
IXMLDOMElement_tid,
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 03d19c1..abd0b37 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -10712,7 +10712,7 @@
static void test_supporterrorinfo(void)
{
- static REFIID iids[3] = { &IID_IXMLDOMDocument, &IID_IXMLDOMDocument2 };
+ static REFIID iids[4] = { &IID_IXMLDOMDocument, &IID_IXMLDOMDocument2, &IID_IXMLDOMDocument3 };
const supporterror_t *ptr = supporterror_test;
ISupportErrorInfo *errorinfo, *info2;
IXMLDOMDocument *doc;