[2/2] msxml3: Add separate QueryInterface implementation for IEnumVARIANT interface exported by IXMLElementCollection.

Dmitry Timoshkov dmitry at baikal.ru
Tue Jan 28 22:56:15 CST 2014


This patch replaces
"msxml3: Don't return implementation pointer as an interface."
---
 dlls/msxml3/tests/xmldoc.c |  1 -
 dlls/msxml3/xmlelem.c      | 16 ++++++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/msxml3/tests/xmldoc.c b/dlls/msxml3/tests/xmldoc.c
index e04f30f..47d28a5 100644
--- a/dlls/msxml3/tests/xmldoc.c
+++ b/dlls/msxml3/tests/xmldoc.c
@@ -728,7 +728,6 @@ static void test_xmlelem_collection(void)
     ok(unk != NULL, "Expected non-NULL unk\n");
 
     hr = IUnknown_QueryInterface(unk, &IID_IXMLElementCollection, (LPVOID *)&enumVar);
-todo_wine
     ok(hr == E_NOINTERFACE, "Expected E_NOINTERFACE, got %08x\n", hr);
 
     hr = IUnknown_QueryInterface(unk, &IID_IEnumVARIANT, (LPVOID *)&enumVar);
diff --git a/dlls/msxml3/xmlelem.c b/dlls/msxml3/xmlelem.c
index 2130c713..de04f31 100644
--- a/dlls/msxml3/xmlelem.c
+++ b/dlls/msxml3/xmlelem.c
@@ -663,7 +663,7 @@ static HRESULT WINAPI xmlelem_collection_get__newEnum(IXMLElementCollection *ifa
     if (!ppUnk)
         return E_INVALIDARG;
 
-    *ppUnk = (IUnknown *)This;
+    *ppUnk = (IUnknown *)&This->IEnumVARIANT_iface;
     IUnknown_AddRef(*ppUnk);
     return S_OK;
 }
@@ -718,7 +718,19 @@ static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_QueryInterface(
     IEnumVARIANT *iface, REFIID riid, LPVOID *ppvObj)
 {
     xmlelem_collection *this = impl_from_IEnumVARIANT(iface);
-    return IXMLDocument_QueryInterface((IXMLDocument *)this, riid, ppvObj);
+
+    TRACE("(%p)->(%s %p)\n", this, debugstr_guid(riid), ppvObj);
+
+    if (IsEqualGUID(riid, &IID_IUnknown) ||
+        IsEqualGUID(riid, &IID_IEnumVARIANT))
+    {
+        *ppvObj = iface;
+        IEnumVARIANT_AddRef(iface);
+        return S_OK;
+    }
+
+    FIXME("interface %s not implemented\n", debugstr_guid(riid));
+    return E_NOINTERFACE;
 }
 
 static ULONG WINAPI xmlelem_collection_IEnumVARIANT_AddRef(
-- 
1.8.5.3




More information about the wine-patches mailing list