Rémi Bernon : windows.gaming.input: Make QueryInterface implementations consistent.

Alexandre Julliard julliard at winehq.org
Mon Mar 7 16:04:55 CST 2022


Module: wine
Branch: master
Commit: 0d3c026bdbac619fb78026a090a3592575df6768
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0d3c026bdbac619fb78026a090a3592575df6768

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Mon Mar  7 10:40:23 2022 +0100

windows.gaming.input: Make QueryInterface implementations consistent.

When COM aggregation is involved it is important to add a reference to
the returned iface and not to the inner object.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windows.gaming.input/controller.c | 6 ++----
 dlls/windows.gaming.input/gamepad.c    | 6 ++----
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/dlls/windows.gaming.input/controller.c b/dlls/windows.gaming.input/controller.c
index 654d0795eac..75ead342004 100644
--- a/dlls/windows.gaming.input/controller.c
+++ b/dlls/windows.gaming.input/controller.c
@@ -46,15 +46,13 @@ static HRESULT WINAPI factory_QueryInterface( IActivationFactory *iface, REFIID
         IsEqualGUID( iid, &IID_IAgileObject ) ||
         IsEqualGUID( iid, &IID_IActivationFactory ))
     {
-        IUnknown_AddRef( iface );
-        *out = iface;
+        IInspectable_AddRef( (*out = &impl->IActivationFactory_iface) );
         return S_OK;
     }
 
     if (IsEqualGUID( iid, &IID_IRawGameControllerStatics ))
     {
-        IUnknown_AddRef( iface );
-        *out = &impl->IRawGameControllerStatics_iface;
+        IInspectable_AddRef( (*out = &impl->IRawGameControllerStatics_iface) );
         return S_OK;
     }
 
diff --git a/dlls/windows.gaming.input/gamepad.c b/dlls/windows.gaming.input/gamepad.c
index 231e923b5e8..ab95b4c8d89 100644
--- a/dlls/windows.gaming.input/gamepad.c
+++ b/dlls/windows.gaming.input/gamepad.c
@@ -46,15 +46,13 @@ static HRESULT WINAPI factory_QueryInterface( IActivationFactory *iface, REFIID
         IsEqualGUID( iid, &IID_IAgileObject ) ||
         IsEqualGUID( iid, &IID_IActivationFactory ))
     {
-        IUnknown_AddRef( iface );
-        *out = iface;
+        IInspectable_AddRef( (*out = &impl->IActivationFactory_iface) );
         return S_OK;
     }
 
     if (IsEqualGUID( iid, &IID_IGamepadStatics ))
     {
-        IUnknown_AddRef( iface );
-        *out = &impl->IGamepadStatics_iface;
+        IInspectable_AddRef( (*out = &impl->IGamepadStatics_iface) );
         return S_OK;
     }
 




More information about the wine-cvs mailing list