From: Nikolay Sivov nsivov@codeweavers.com
Even though IXMLDocument2 does not inherit from IXMLDocument, it extends it in practice. Return automation type info also points to IID_IXMLDocument2.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/msxml3/dispex.c | 4 +- dlls/msxml3/msxml_dispex.h | 4 +- dlls/msxml3/tests/xmldoc.c | 33 ++++------- dlls/msxml3/xmldoc.c | 118 +++++++++++++++++++++---------------- dlls/msxml3/xmlelem.c | 111 ++++++++++++++++++---------------- 5 files changed, 141 insertions(+), 129 deletions(-)
diff --git a/dlls/msxml3/dispex.c b/dlls/msxml3/dispex.c index cccbff0e7dd..700b36ea2f8 100644 --- a/dlls/msxml3/dispex.c +++ b/dlls/msxml3/dispex.c @@ -102,8 +102,8 @@ static tid_id_t tid_ids[] = { { &IID_IXMLDOMSchemaCollection2, LibXml2 }, { &IID_IXMLDOMSelection, LibXml2 }, { &IID_IXMLDOMText, LibXml2 }, - { &IID_IXMLElement, LibXml }, - { &IID_IXMLDocument, LibXml }, + { &IID_IXMLElement2, LibXml }, + { &IID_IXMLDocument2, LibXml }, { &IID_IXMLHTTPRequest, LibXml2 }, { &IID_IXSLProcessor, LibXml2 }, { &IID_IXSLTemplate, LibXml2 }, diff --git a/dlls/msxml3/msxml_dispex.h b/dlls/msxml3/msxml_dispex.h index 512aad54e17..e0020ec0bbf 100644 --- a/dlls/msxml3/msxml_dispex.h +++ b/dlls/msxml3/msxml_dispex.h @@ -56,8 +56,8 @@ typedef enum tid_t IXMLDOMSchemaCollection2_tid, IXMLDOMSelection_tid, IXMLDOMText_tid, - IXMLElement_tid, - IXMLDocument_tid, + IXMLElement2_tid, + IXMLDocument2_tid, IXMLHTTPRequest_tid, IXSLProcessor_tid, IXSLTemplate_tid, diff --git a/dlls/msxml3/tests/xmldoc.c b/dlls/msxml3/tests/xmldoc.c index 211186ee302..0bc7dc49004 100644 --- a/dlls/msxml3/tests/xmldoc.c +++ b/dlls/msxml3/tests/xmldoc.c @@ -127,11 +127,11 @@ static void test_xmldoc(void) IPersistStreamInit *psi = NULL; IXMLDocument *doc = NULL; IStream *stream = NULL; - IUnknown *unk1, *unk2; VARIANT vIndex, vName; LONG type, num_child; IXMLDocument2 *doc2; CHAR path[MAX_PATH]; + TYPEATTR *tattr; IDispatch *disp; ITypeInfo *ti; HRESULT hr; @@ -144,7 +144,6 @@ static void test_xmldoc(void) check_interface(doc, &IID_IUnknown, TRUE); check_interface(doc, &IID_IDispatch, TRUE); check_interface(doc, &IID_IXMLDocument, TRUE); - todo_wine check_interface(doc, &IID_IXMLDocument2, TRUE); check_interface(doc, &IID_IPersistStreamInit, TRUE); check_interface(doc, &IID_IPersistStream, TRUE); @@ -155,26 +154,18 @@ static void test_xmldoc(void) check_interface(doc, &IID_IXMLDOMDocument, FALSE);
hr = IXMLDocument_QueryInterface(doc, &IID_IXMLDocument2, (void **)&doc2); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) - { - hr = IXMLDocument2_QueryInterface(doc2, &IID_IDispatch, (void **)&disp); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok(disp == (IDispatch *)doc2, "Unexpected pointer.\n"); - IDispatch_Release(disp); - hr = IXMLDocument2_QueryInterface(doc2, &IID_IUnknown, (void **)&unk2); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok(unk2 != (IUnknown *)doc2, "Unexpected pointer.\n"); - IXMLDocument2_Release(doc2); - - hr = IXMLDocument_QueryInterface(doc, &IID_IUnknown, (void **)&unk1); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok(unk1 != (IUnknown *)doc, "Unexpected pointer.\n"); - ok(unk1 == unk2, "Unexpected pointer.\n"); - IUnknown_Release(unk1); - IUnknown_Release(unk2); - } + hr = IXMLDocument2_QueryInterface(doc2, &IID_IDispatch, (void **)&disp); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(disp == (IDispatch *)doc2, "Unexpected pointer.\n"); + hr = IDispatch_GetTypeInfo(disp, 0, 0, &ti); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = ITypeInfo_GetTypeAttr(ti, &tattr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&tattr->guid, &IID_IXMLDocument2), "Unexpected guid %s.\n", wine_dbgstr_guid(&tattr->guid)); + ITypeInfo_ReleaseTypeAttr(ti, tattr); + ITypeInfo_Release(ti); + IDispatch_Release(disp);
/* IDispatch */ hr = IXMLDocument_QueryInterface(doc, &IID_IDispatch, (void**)&disp); diff --git a/dlls/msxml3/xmldoc.c b/dlls/msxml3/xmldoc.c index 290ed775d99..abd6337c32b 100644 --- a/dlls/msxml3/xmldoc.c +++ b/dlls/msxml3/xmldoc.c @@ -47,7 +47,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
typedef struct _xmldoc { - IXMLDocument IXMLDocument_iface; + IXMLDocument2 IXMLDocument2_iface; IPersistStreamInit IPersistStreamInit_iface; LONG ref; HRESULT error; @@ -59,9 +59,9 @@ typedef struct _xmldoc IStream *stream; } xmldoc;
-static inline xmldoc *impl_from_IXMLDocument(IXMLDocument *iface) +static inline xmldoc *impl_from_IXMLDocument2(IXMLDocument2 *iface) { - return CONTAINING_RECORD(iface, xmldoc, IXMLDocument_iface); + return CONTAINING_RECORD(iface, xmldoc, IXMLDocument2_iface); }
static inline xmldoc *impl_from_IPersistStreamInit(IPersistStreamInit *iface) @@ -69,15 +69,16 @@ static inline xmldoc *impl_from_IPersistStreamInit(IPersistStreamInit *iface) return CONTAINING_RECORD(iface, xmldoc, IPersistStreamInit_iface); }
-static HRESULT WINAPI xmldoc_QueryInterface(IXMLDocument *iface, REFIID riid, void** ppvObject) +static HRESULT WINAPI xmldoc_QueryInterface(IXMLDocument2 *iface, REFIID riid, void** ppvObject) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface);
TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDispatch) || - IsEqualGUID(riid, &IID_IXMLDocument)) + IsEqualGUID(riid, &IID_IXMLDocument) || + IsEqualGUID(riid, &IID_IXMLDocument2)) { *ppvObject = iface; } @@ -93,22 +94,22 @@ static HRESULT WINAPI xmldoc_QueryInterface(IXMLDocument *iface, REFIID riid, vo return E_NOINTERFACE; }
- IXMLDocument_AddRef(iface); + IXMLDocument2_AddRef(iface);
return S_OK; }
-static ULONG WINAPI xmldoc_AddRef(IXMLDocument *iface) +static ULONG WINAPI xmldoc_AddRef(IXMLDocument2 *iface) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface); ULONG ref = InterlockedIncrement(&This->ref); TRACE("%p, refcount %ld.\n", iface, ref); return ref; }
-static ULONG WINAPI xmldoc_Release(IXMLDocument *iface) +static ULONG WINAPI xmldoc_Release(IXMLDocument2 *iface) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface); LONG ref = InterlockedDecrement(&This->ref);
TRACE("%p, refcount %ld.\n", iface, ref); @@ -123,26 +124,24 @@ static ULONG WINAPI xmldoc_Release(IXMLDocument *iface) return ref; }
-static HRESULT WINAPI xmldoc_GetTypeInfoCount(IXMLDocument *iface, UINT* pctinfo) +static HRESULT WINAPI xmldoc_GetTypeInfoCount(IXMLDocument2 *iface, UINT* pctinfo) { - xmldoc *This = impl_from_IXMLDocument(iface); - - TRACE("(%p)->(%p)\n", This, pctinfo); + TRACE("%p, %p.\n", iface, pctinfo);
*pctinfo = 1;
return S_OK; }
-static HRESULT WINAPI xmldoc_GetTypeInfo(IXMLDocument *iface, UINT iTInfo, +static HRESULT WINAPI xmldoc_GetTypeInfo(IXMLDocument2 *iface, UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) { TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
- return get_typeinfo(IXMLDocument_tid, ppTInfo); + return get_typeinfo(IXMLDocument2_tid, ppTInfo); }
-static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid, +static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument2 *iface, REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) { @@ -155,7 +154,7 @@ static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid, if(!rgszNames || cNames == 0 || !rgDispId) return E_INVALIDARG;
- hr = get_typeinfo(IXMLDocument_tid, &typeinfo); + hr = get_typeinfo(IXMLDocument2_tid, &typeinfo); if(SUCCEEDED(hr)) { hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); @@ -165,7 +164,7 @@ static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid, return hr; }
-static HRESULT WINAPI xmldoc_Invoke(IXMLDocument *iface, DISPID dispIdMember, +static HRESULT WINAPI xmldoc_Invoke(IXMLDocument2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) @@ -176,7 +175,7 @@ static HRESULT WINAPI xmldoc_Invoke(IXMLDocument *iface, DISPID dispIdMember, TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- hr = get_typeinfo(IXMLDocument_tid, &typeinfo); + hr = get_typeinfo(IXMLDocument2_tid, &typeinfo); if(SUCCEEDED(hr)) { hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); @@ -186,9 +185,9 @@ static HRESULT WINAPI xmldoc_Invoke(IXMLDocument *iface, DISPID dispIdMember, return hr; }
-static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p) +static HRESULT WINAPI xmldoc_get_root(IXMLDocument2 *iface, IXMLElement2 **p) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface); xmlNodePtr root;
TRACE("(%p, %p)\n", iface, p); @@ -204,25 +203,25 @@ static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p) return XMLElement_create(root, (LPVOID *)p, FALSE); }
-static HRESULT WINAPI xmldoc_get_fileSize(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_fileSize(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_put_fileModifiedDate(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_put_fileModifiedDate(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_get_fileUpdatedDate(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_fileUpdatedDate(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_get_URL(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_URL(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; @@ -346,7 +345,7 @@ static const struct IBindStatusCallbackVtbl bsc_vtbl =
static bsc xmldoc_bsc = { { &bsc_vtbl } };
-static HRESULT WINAPI xmldoc_put_URL(IXMLDocument *iface, BSTR p) +static HRESULT WINAPI xmldoc_put_URL(IXMLDocument2 *iface, BSTR p) { WCHAR url[INTERNET_MAX_URL_LENGTH]; IStream *stream; @@ -392,7 +391,7 @@ static HRESULT WINAPI xmldoc_put_URL(IXMLDocument *iface, BSTR p) if (FAILED(hr)) return hr;
- hr = IXMLDocument_QueryInterface(iface, &IID_IPersistStreamInit, (LPVOID *)&persist); + hr = IXMLDocument2_QueryInterface(iface, &IID_IPersistStreamInit, (LPVOID *)&persist); if (FAILED(hr)) { IStream_Release(stream); @@ -406,33 +405,33 @@ static HRESULT WINAPI xmldoc_put_URL(IXMLDocument *iface, BSTR p) return hr; }
-static HRESULT WINAPI xmldoc_get_mimeType(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_mimeType(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_get_readyState(IXMLDocument *iface, LONG *p) +static HRESULT WINAPI xmldoc_get_readyState(IXMLDocument2 *iface, LONG *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_get_charset(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_charset(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_put_charset(IXMLDocument *iface, BSTR p) +static HRESULT WINAPI xmldoc_put_charset(IXMLDocument2 *iface, BSTR p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; }
-static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_version(IXMLDocument2 *iface, BSTR *p) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface);
TRACE("(%p, %p)\n", This, p);
@@ -442,9 +441,9 @@ static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p) return S_OK; }
-static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument2 *iface, BSTR *p) { - xmldoc *This = impl_from_IXMLDocument(iface); + xmldoc *This = impl_from_IXMLDocument2(iface); xmlDtd *dtd;
TRACE("(%p, %p)\n", This, p); @@ -460,7 +459,7 @@ static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p) return S_OK; }
-static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument *iface, BSTR *p) +static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument2 *iface, BSTR *p) { FIXME("(%p, %p): stub\n", iface, p); return E_NOTIMPL; @@ -489,8 +488,8 @@ static xmlElementType type_msxml_to_libxml(LONG type) return -1; /* FIXME: what is OTHER in msxml? */ }
-static HRESULT WINAPI xmldoc_createElement(IXMLDocument *iface, VARIANT vType, - VARIANT var1, IXMLElement **ppElem) +static HRESULT WINAPI xmldoc_createElement(IXMLDocument2 *iface, VARIANT vType, + VARIANT var1, IXMLElement2 **ppElem) { xmlNodePtr node; static const xmlChar empty[] = "\0"; @@ -516,7 +515,21 @@ static HRESULT WINAPI xmldoc_createElement(IXMLDocument *iface, VARIANT vType, return XMLElement_create(node, (LPVOID *)ppElem, TRUE); }
-static const struct IXMLDocumentVtbl xmldoc_vtbl = +static HRESULT WINAPI xmldoc_get_async(IXMLDocument2 *iface, VARIANT_BOOL *v) +{ + FIXME("%p, %p stub\n", iface, v); + + return E_NOTIMPL; +} + +static HRESULT WINAPI xmldoc_put_async(IXMLDocument2 *iface, VARIANT_BOOL v) +{ + FIXME("%p, %#x stub\n", iface, v); + + return E_NOTIMPL; +} + +static const struct IXMLDocument2Vtbl xmldoc_vtbl = { xmldoc_QueryInterface, xmldoc_AddRef, @@ -538,7 +551,9 @@ static const struct IXMLDocumentVtbl xmldoc_vtbl = xmldoc_get_version, xmldoc_get_doctype, xmldoc_get_dtdURl, - xmldoc_createElement + xmldoc_createElement, + xmldoc_get_async, + xmldoc_put_async, };
/************************************************************************ @@ -547,29 +562,28 @@ static const struct IXMLDocumentVtbl xmldoc_vtbl = static HRESULT WINAPI xmldoc_IPersistStreamInit_QueryInterface( IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj) { - xmldoc *this = impl_from_IPersistStreamInit(iface); - return IXMLDocument_QueryInterface(&this->IXMLDocument_iface, riid, ppvObj); + xmldoc *doc = impl_from_IPersistStreamInit(iface); + return IXMLDocument2_QueryInterface(&doc->IXMLDocument2_iface, riid, ppvObj); }
static ULONG WINAPI xmldoc_IPersistStreamInit_AddRef( IPersistStreamInit *iface) { - xmldoc *this = impl_from_IPersistStreamInit(iface); - return IXMLDocument_AddRef(&this->IXMLDocument_iface); + xmldoc *doc = impl_from_IPersistStreamInit(iface); + return IXMLDocument2_AddRef(&doc->IXMLDocument2_iface); }
static ULONG WINAPI xmldoc_IPersistStreamInit_Release( IPersistStreamInit *iface) { - xmldoc *this = impl_from_IPersistStreamInit(iface); - return IXMLDocument_Release(&this->IXMLDocument_iface); + xmldoc *doc = impl_from_IPersistStreamInit(iface); + return IXMLDocument2_Release(&doc->IXMLDocument2_iface); }
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID( IPersistStreamInit *iface, CLSID *classid) { - xmldoc *this = impl_from_IPersistStreamInit(iface); - TRACE("(%p,%p)\n", this, classid); + TRACE("%p, %p.\n", iface, classid);
if (!classid) return E_POINTER;
@@ -691,14 +705,14 @@ HRESULT XMLDocument_create(LPVOID *ppObj) if(!doc) return E_OUTOFMEMORY;
- doc->IXMLDocument_iface.lpVtbl = &xmldoc_vtbl; + doc->IXMLDocument2_iface.lpVtbl = &xmldoc_vtbl; doc->IPersistStreamInit_iface.lpVtbl = &xmldoc_IPersistStreamInit_VTable; doc->ref = 1; doc->error = S_OK; doc->xmldoc = NULL; doc->stream = NULL;
- *ppObj = &doc->IXMLDocument_iface; + *ppObj = &doc->IXMLDocument2_iface;
TRACE("returning iface %p\n", *ppObj); return S_OK; diff --git a/dlls/msxml3/xmlelem.c b/dlls/msxml3/xmlelem.c index 0d7d836f9e4..e6a569ac5f2 100644 --- a/dlls/msxml3/xmlelem.c +++ b/dlls/msxml3/xmlelem.c @@ -40,30 +40,31 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml); static HRESULT XMLElementCollection_create( xmlNodePtr node, LPVOID *ppObj );
/********************************************************************** - * IXMLElement + * IXMLElement2 */ typedef struct _xmlelem { - IXMLElement IXMLElement_iface; + IXMLElement2 IXMLElement2_iface; LONG ref; xmlNodePtr node; BOOL own; } xmlelem;
-static inline xmlelem *impl_from_IXMLElement(IXMLElement *iface) +static inline xmlelem *impl_from_IXMLElement2(IXMLElement2 *iface) { - return CONTAINING_RECORD(iface, xmlelem, IXMLElement_iface); + return CONTAINING_RECORD(iface, xmlelem, IXMLElement2_iface); }
-static HRESULT WINAPI xmlelem_QueryInterface(IXMLElement *iface, REFIID riid, void** ppvObject) +static HRESULT WINAPI xmlelem_QueryInterface(IXMLElement2 *iface, REFIID riid, void** ppvObject) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDispatch) || - IsEqualGUID(riid, &IID_IXMLElement)) + IsEqualGUID(riid, &IID_IXMLElement) || + IsEqualGUID(riid, &IID_IXMLElement2)) { *ppvObject = iface; } @@ -74,21 +75,21 @@ static HRESULT WINAPI xmlelem_QueryInterface(IXMLElement *iface, REFIID riid, vo return E_NOINTERFACE; }
- IXMLElement_AddRef(iface); + IXMLElement2_AddRef(iface);
return S_OK; }
-static ULONG WINAPI xmlelem_AddRef(IXMLElement *iface) +static ULONG WINAPI xmlelem_AddRef(IXMLElement2 *iface) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); TRACE("%p\n", This); return InterlockedIncrement(&This->ref); }
-static ULONG WINAPI xmlelem_Release(IXMLElement *iface) +static ULONG WINAPI xmlelem_Release(IXMLElement2 *iface) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); LONG ref;
TRACE("%p\n", This); @@ -103,26 +104,24 @@ static ULONG WINAPI xmlelem_Release(IXMLElement *iface) return ref; }
-static HRESULT WINAPI xmlelem_GetTypeInfoCount(IXMLElement *iface, UINT* pctinfo) +static HRESULT WINAPI xmlelem_GetTypeInfoCount(IXMLElement2 *iface, UINT* pctinfo) { - xmlelem *This = impl_from_IXMLElement(iface); - - TRACE("(%p)->(%p)\n", This, pctinfo); + TRACE("%p, %p.\n", iface, pctinfo);
*pctinfo = 1;
return S_OK; }
-static HRESULT WINAPI xmlelem_GetTypeInfo(IXMLElement *iface, UINT iTInfo, +static HRESULT WINAPI xmlelem_GetTypeInfo(IXMLElement2 *iface, UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) { TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
- return get_typeinfo(IXMLElement_tid, ppTInfo); + return get_typeinfo(IXMLElement2_tid, ppTInfo); }
-static HRESULT WINAPI xmlelem_GetIDsOfNames(IXMLElement *iface, REFIID riid, +static HRESULT WINAPI xmlelem_GetIDsOfNames(IXMLElement2 *iface, REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) { @@ -135,7 +134,7 @@ static HRESULT WINAPI xmlelem_GetIDsOfNames(IXMLElement *iface, REFIID riid, if(!rgszNames || cNames == 0 || !rgDispId) return E_INVALIDARG;
- hr = get_typeinfo(IXMLElement_tid, &typeinfo); + hr = get_typeinfo(IXMLElement2_tid, &typeinfo); if(SUCCEEDED(hr)) { hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); @@ -145,7 +144,7 @@ static HRESULT WINAPI xmlelem_GetIDsOfNames(IXMLElement *iface, REFIID riid, return hr; }
-static HRESULT WINAPI xmlelem_Invoke(IXMLElement *iface, DISPID dispIdMember, +static HRESULT WINAPI xmlelem_Invoke(IXMLElement2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) @@ -156,7 +155,7 @@ static HRESULT WINAPI xmlelem_Invoke(IXMLElement *iface, DISPID dispIdMember, TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- hr = get_typeinfo(IXMLElement_tid, &typeinfo); + hr = get_typeinfo(IXMLElement2_tid, &typeinfo); if(SUCCEEDED(hr)) { hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); @@ -166,9 +165,9 @@ static HRESULT WINAPI xmlelem_Invoke(IXMLElement *iface, DISPID dispIdMember, return hr; }
-static HRESULT WINAPI xmlelem_get_tagName(IXMLElement *iface, BSTR *p) +static HRESULT WINAPI xmlelem_get_tagName(IXMLElement2 *iface, BSTR *p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
TRACE("(%p)->(%p)\n", This, p);
@@ -187,9 +186,9 @@ static HRESULT WINAPI xmlelem_get_tagName(IXMLElement *iface, BSTR *p) return S_OK; }
-static HRESULT WINAPI xmlelem_put_tagName(IXMLElement *iface, BSTR p) +static HRESULT WINAPI xmlelem_put_tagName(IXMLElement2 *iface, BSTR p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
FIXME("(%p)->(%s): stub\n", This, debugstr_w(p));
@@ -199,9 +198,9 @@ static HRESULT WINAPI xmlelem_put_tagName(IXMLElement *iface, BSTR p) return E_NOTIMPL; }
-static HRESULT WINAPI xmlelem_get_parent(IXMLElement *iface, IXMLElement **parent) +static HRESULT WINAPI xmlelem_get_parent(IXMLElement2 *iface, IXMLElement2 **parent) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
TRACE("(%p)->(%p)\n", This, parent);
@@ -216,10 +215,10 @@ static HRESULT WINAPI xmlelem_get_parent(IXMLElement *iface, IXMLElement **paren return XMLElement_create(This->node->parent, (LPVOID *)parent, FALSE); }
-static HRESULT WINAPI xmlelem_setAttribute(IXMLElement *iface, BSTR strPropertyName, +static HRESULT WINAPI xmlelem_setAttribute(IXMLElement2 *iface, BSTR strPropertyName, VARIANT PropertyValue) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); xmlChar *name, *value; xmlAttrPtr attr;
@@ -237,10 +236,10 @@ static HRESULT WINAPI xmlelem_setAttribute(IXMLElement *iface, BSTR strPropertyN return (attr) ? S_OK : S_FALSE; }
-static HRESULT WINAPI xmlelem_getAttribute(IXMLElement *iface, BSTR name, +static HRESULT WINAPI xmlelem_getAttribute(IXMLElement2 *iface, BSTR name, VARIANT *value) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); xmlChar *val = NULL;
TRACE("(%p)->(%s, %p)\n", This, debugstr_w(name), value); @@ -298,9 +297,9 @@ static HRESULT WINAPI xmlelem_getAttribute(IXMLElement *iface, BSTR name, return (val) ? S_OK : S_FALSE; }
-static HRESULT WINAPI xmlelem_removeAttribute(IXMLElement *iface, BSTR strPropertyName) +static HRESULT WINAPI xmlelem_removeAttribute(IXMLElement2 *iface, BSTR strPropertyName) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); xmlChar *name; xmlAttrPtr attr; int res; @@ -326,9 +325,9 @@ done: return hr; }
-static HRESULT WINAPI xmlelem_get_children(IXMLElement *iface, IXMLElementCollection **p) +static HRESULT WINAPI xmlelem_get_children(IXMLElement2 *iface, IXMLElementCollection **p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
TRACE("(%p)->(%p)\n", This, p);
@@ -361,9 +360,9 @@ static LONG type_libxml_to_msxml(xmlElementType type) return XMLELEMTYPE_OTHER; }
-static HRESULT WINAPI xmlelem_get_type(IXMLElement *iface, LONG *p) +static HRESULT WINAPI xmlelem_get_type(IXMLElement2 *iface, LONG *p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface);
TRACE("(%p)->(%p)\n", This, p);
@@ -375,9 +374,9 @@ static HRESULT WINAPI xmlelem_get_type(IXMLElement *iface, LONG *p) return S_OK; }
-static HRESULT WINAPI xmlelem_get_text(IXMLElement *iface, BSTR *p) +static HRESULT WINAPI xmlelem_get_text(IXMLElement2 *iface, BSTR *p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); xmlChar *content;
TRACE("(%p)->(%p)\n", This, p); @@ -393,9 +392,9 @@ static HRESULT WINAPI xmlelem_get_text(IXMLElement *iface, BSTR *p) return S_OK; }
-static HRESULT WINAPI xmlelem_put_text(IXMLElement *iface, BSTR p) +static HRESULT WINAPI xmlelem_put_text(IXMLElement2 *iface, BSTR p) { - xmlelem *This = impl_from_IXMLElement(iface); + xmlelem *This = impl_from_IXMLElement2(iface); xmlChar *content;
TRACE("(%p)->(%s)\n", This, debugstr_w(p)); @@ -412,11 +411,11 @@ static HRESULT WINAPI xmlelem_put_text(IXMLElement *iface, BSTR p) return S_OK; }
-static HRESULT WINAPI xmlelem_addChild(IXMLElement *iface, IXMLElement *pChildElem, +static HRESULT WINAPI xmlelem_addChild(IXMLElement2 *iface, IXMLElement2 *pChildElem, LONG lIndex, LONG lreserved) { - xmlelem *This = impl_from_IXMLElement(iface); - xmlelem *childElem = impl_from_IXMLElement(pChildElem); + xmlelem *This = impl_from_IXMLElement2(iface); + xmlelem *childElem = impl_from_IXMLElement2(pChildElem); xmlNodePtr child;
TRACE("%p, %p, %ld, %ld.\n", iface, pChildElem, lIndex, lreserved); @@ -432,10 +431,10 @@ static HRESULT WINAPI xmlelem_addChild(IXMLElement *iface, IXMLElement *pChildEl return (child) ? S_OK : S_FALSE; }
-static HRESULT WINAPI xmlelem_removeChild(IXMLElement *iface, IXMLElement *pChildElem) +static HRESULT WINAPI xmlelem_removeChild(IXMLElement2 *iface, IXMLElement2 *pChildElem) { - xmlelem *This = impl_from_IXMLElement(iface); - xmlelem *childElem = impl_from_IXMLElement(pChildElem); + xmlelem *This = impl_from_IXMLElement2(iface); + xmlelem *childElem = impl_from_IXMLElement2(pChildElem);
TRACE("(%p)->(%p)\n", This, childElem);
@@ -453,7 +452,14 @@ static HRESULT WINAPI xmlelem_removeChild(IXMLElement *iface, IXMLElement *pChil return S_OK; }
-static const struct IXMLElementVtbl xmlelem_vtbl = +static HRESULT WINAPI xmlelem_attributes(IXMLElement2 *iface, IXMLElementCollection **p) +{ + FIXME("%p, %p stub\n", iface, p); + + return E_NOTIMPL; +} + +static const struct IXMLElement2Vtbl xmlelem_vtbl = { xmlelem_QueryInterface, xmlelem_AddRef, @@ -473,7 +479,8 @@ static const struct IXMLElementVtbl xmlelem_vtbl = xmlelem_get_text, xmlelem_put_text, xmlelem_addChild, - xmlelem_removeChild + xmlelem_removeChild, + xmlelem_attributes, };
HRESULT XMLElement_create(xmlNodePtr node, LPVOID *ppObj, BOOL own) @@ -491,12 +498,12 @@ HRESULT XMLElement_create(xmlNodePtr node, LPVOID *ppObj, BOOL own) if(!elem) return E_OUTOFMEMORY;
- elem->IXMLElement_iface.lpVtbl = &xmlelem_vtbl; + elem->IXMLElement2_iface.lpVtbl = &xmlelem_vtbl; elem->ref = 1; elem->node = node; elem->own = own;
- *ppObj = &elem->IXMLElement_iface; + *ppObj = &elem->IXMLElement2_iface;
TRACE("returning iface %p\n", *ppObj); return S_OK;