Michael Stefaniuc : mstask: COM cleanup for the ITaskScheduler iface.

Alexandre Julliard julliard at winehq.org
Mon Jan 24 11:07:34 CST 2011


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Mon Jan 24 00:14:53 2011 +0100

mstask: COM cleanup for the ITaskScheduler iface.

---

 dlls/mstask/mstask_private.h |    6 ------
 dlls/mstask/task_scheduler.c |   23 +++++++++++++++++------
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/dlls/mstask/mstask_private.h b/dlls/mstask/mstask_private.h
index d159b8e..ac965e2 100644
--- a/dlls/mstask/mstask_private.h
+++ b/dlls/mstask/mstask_private.h
@@ -35,12 +35,6 @@ typedef struct ClassFactoryImpl ClassFactoryImpl;
 extern ClassFactoryImpl MSTASK_ClassFactory;
 
 extern HRESULT TaskTriggerConstructor(LPVOID *ppObj);
-
-typedef struct
-{
-    const ITaskSchedulerVtbl *lpVtbl;
-    LONG ref;
-} TaskSchedulerImpl;
 extern HRESULT TaskSchedulerConstructor(LPVOID *ppObj);
 
 typedef struct
diff --git a/dlls/mstask/task_scheduler.c b/dlls/mstask/task_scheduler.c
index 5efa086..1d2ac21 100644
--- a/dlls/mstask/task_scheduler.c
+++ b/dlls/mstask/task_scheduler.c
@@ -22,6 +22,17 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mstask);
 
+typedef struct
+{
+    ITaskScheduler ITaskScheduler_iface;
+    LONG ref;
+} TaskSchedulerImpl;
+
+static inline TaskSchedulerImpl *impl_from_ITaskScheduler(ITaskScheduler *iface)
+{
+    return CONTAINING_RECORD(iface, TaskSchedulerImpl, ITaskScheduler_iface);
+}
+
 static void TaskSchedulerDestructor(TaskSchedulerImpl *This)
 {
     TRACE("%p\n", This);
@@ -34,14 +45,14 @@ static HRESULT WINAPI MSTASK_ITaskScheduler_QueryInterface(
         REFIID riid,
         void **ppvObject)
 {
-    TaskSchedulerImpl * This = (TaskSchedulerImpl *)iface;
+    TaskSchedulerImpl * This = impl_from_ITaskScheduler(iface);
 
     TRACE("IID: %s\n", debugstr_guid(riid));
 
     if (IsEqualGUID(riid, &IID_IUnknown) ||
             IsEqualGUID(riid, &IID_ITaskScheduler))
     {
-        *ppvObject = &This->lpVtbl;
+        *ppvObject = &This->ITaskScheduler_iface;
         ITaskScheduler_AddRef(iface);
         return S_OK;
     }
@@ -53,7 +64,7 @@ static HRESULT WINAPI MSTASK_ITaskScheduler_QueryInterface(
 static ULONG WINAPI MSTASK_ITaskScheduler_AddRef(
         ITaskScheduler* iface)
 {
-    TaskSchedulerImpl *This = (TaskSchedulerImpl *)iface;
+    TaskSchedulerImpl *This = impl_from_ITaskScheduler(iface);
     TRACE("\n");
     return InterlockedIncrement(&This->ref);
 }
@@ -61,7 +72,7 @@ static ULONG WINAPI MSTASK_ITaskScheduler_AddRef(
 static ULONG WINAPI MSTASK_ITaskScheduler_Release(
         ITaskScheduler* iface)
 {
-    TaskSchedulerImpl * This = (TaskSchedulerImpl *)iface;
+    TaskSchedulerImpl * This = impl_from_ITaskScheduler(iface);
     ULONG ref;
     TRACE("\n");
     ref = InterlockedDecrement(&This->ref);
@@ -178,10 +189,10 @@ HRESULT TaskSchedulerConstructor(LPVOID *ppObj)
     if (!This)
         return E_OUTOFMEMORY;
 
-    This->lpVtbl = &MSTASK_ITaskSchedulerVtbl;
+    This->ITaskScheduler_iface.lpVtbl = &MSTASK_ITaskSchedulerVtbl;
     This->ref = 1;
 
-    *ppObj = &This->lpVtbl;
+    *ppObj = &This->ITaskScheduler_iface;
     InterlockedIncrement(&dll_ref);
     return S_OK;
 }




More information about the wine-cvs mailing list