Michael Stefaniuc : mscoree: There can be only one QI implementation in a COM object.

Alexandre Julliard julliard at winehq.org
Mon Sep 12 10:14:09 CDT 2016


Module: wine
Branch: master
Commit: cac5a5996a6bba6e9c99de5f3acda59510a0cddc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cac5a5996a6bba6e9c99de5f3acda59510a0cddc

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Thu Sep  8 21:25:27 2016 +0200

mscoree: There can be only one QI implementation in a COM object.

Signed-off-by: Michael Stefaniuc <mstefani at redhat.de>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mscoree/config.c | 29 +++++++++--------------------
 1 file changed, 9 insertions(+), 20 deletions(-)

diff --git a/dlls/mscoree/config.c b/dlls/mscoree/config.c
index b8bf882..a52a521 100644
--- a/dlls/mscoree/config.c
+++ b/dlls/mscoree/config.c
@@ -73,18 +73,19 @@ static inline ConfigFileHandler *impl_from_ISAXErrorHandler(ISAXErrorHandler *if
 static HRESULT WINAPI ConfigFileHandler_QueryInterface(ISAXContentHandler *iface,
     REFIID riid, void **ppvObject)
 {
-    if (IsEqualGUID(riid, &IID_ISAXContentHandler) ||
-        IsEqualGUID(riid, &IID_IUnknown))
-    {
-        *ppvObject = iface;
-    }
+    ConfigFileHandler *This = impl_from_ISAXContentHandler(iface);
+
+    if (IsEqualGUID(riid, &IID_ISAXContentHandler) || IsEqualGUID(riid, &IID_IUnknown))
+        *ppvObject = &This->ISAXContentHandler_iface;
+    else if (IsEqualGUID(riid, &IID_ISAXErrorHandler))
+        *ppvObject = &This->ISAXErrorHandler_iface;
     else
     {
         WARN("Unsupported interface %s\n", debugstr_guid(riid));
         return E_NOINTERFACE;
     }
 
-    ISAXContentHandler_AddRef(iface);
+    IUnknown_AddRef((IUnknown*)*ppvObject);
 
     return S_OK;
 }
@@ -377,20 +378,8 @@ static const struct ISAXContentHandlerVtbl ConfigFileHandlerVtbl =
 static HRESULT WINAPI ConfigFileHandler_Error_QueryInterface(ISAXErrorHandler *iface,
     REFIID riid, void **ppvObject)
 {
-    if (IsEqualGUID(riid, &IID_ISAXErrorHandler) ||
-        IsEqualGUID(riid, &IID_IUnknown))
-    {
-        *ppvObject = iface;
-    }
-    else
-    {
-        WARN("Unsupported interface %s\n", debugstr_guid(riid));
-        return E_NOINTERFACE;
-    }
-
-    ISAXErrorHandler_AddRef(iface);
-
-    return S_OK;
+    ConfigFileHandler *This = impl_from_ISAXErrorHandler(iface);
+    return ISAXContentHandler_QueryInterface(&This->ISAXContentHandler_iface, riid, ppvObject);
 }
 
 static ULONG WINAPI ConfigFileHandler_Error_AddRef(ISAXErrorHandler *iface)




More information about the wine-cvs mailing list