shdocvw: Take the riid parameter to TaskbarList_Create() into account.

Henri Verbeet hverbeet at codeweavers.com
Tue Jun 16 02:38:25 CDT 2009


---
 dlls/shdocvw/taskbarlist.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/dlls/shdocvw/taskbarlist.c b/dlls/shdocvw/taskbarlist.c
index e0e063c..4eee34f 100644
--- a/dlls/shdocvw/taskbarlist.c
+++ b/dlls/shdocvw/taskbarlist.c
@@ -130,12 +130,14 @@ static const struct ITaskbarListVtbl taskbar_list_vtbl =
 HRESULT TaskbarList_Create(IUnknown *outer, REFIID riid, void **taskbar_list)
 {
     struct taskbar_list *object;
+    HRESULT hr;
 
     TRACE("outer %p, riid %s, taskbar_list %p\n", outer, debugstr_guid(riid), taskbar_list);
 
     if (outer)
     {
         WARN("Aggregation not supported\n");
+        *taskbar_list = NULL;
         return CLASS_E_NOAGGREGATION;
     }
 
@@ -143,15 +145,21 @@ HRESULT TaskbarList_Create(IUnknown *outer, REFIID riid, void **taskbar_list)
     if (!object)
     {
         ERR("Failed to allocate taskbar list object memory\n");
+        *taskbar_list = NULL;
         return E_OUTOFMEMORY;
     }
 
     object->lpVtbl = &taskbar_list_vtbl;
-    object->refcount = 1;
-
-    *taskbar_list = object;
+    object->refcount = 0;
 
     TRACE("Created ITaskbarList %p\n", object);
 
+    hr = ITaskbarList_QueryInterface((ITaskbarList *)object, riid, taskbar_list);
+    if (FAILED(hr))
+    {
+        HeapFree(GetProcessHeap(), 0, object);
+        return hr;
+    }
+
     return S_OK;
 }
-- 
1.6.0.6



--------------070808020006090208080403--



More information about the wine-patches mailing list