[PATCH 07/11] dmscript: COM cleanup for IDirectMusicTrack8 from DirectMusicScriptTrack.

Michael Stefaniuc mstefani at redhat.de
Sun Jan 12 15:09:30 CST 2014


---
 dlls/dmscript/dmscript_private.h | 16 --------
 dlls/dmscript/scripttrack.c      | 85 +++++++++++++++++++++++++---------------
 2 files changed, 53 insertions(+), 48 deletions(-)

diff --git a/dlls/dmscript/dmscript_private.h b/dlls/dmscript/dmscript_private.h
index 97557bc..082ffa4 100644
--- a/dlls/dmscript/dmscript_private.h
+++ b/dlls/dmscript/dmscript_private.h
@@ -47,8 +47,6 @@
  */
 typedef struct IDirectMusicScriptImpl IDirectMusicScriptImpl;
 
-typedef struct IDirectMusicScriptTrack IDirectMusicScriptTrack;
-
 /*****************************************************************************
  * ClassFactory
  */
@@ -74,20 +72,6 @@ struct IDirectMusicScriptImpl {
   WCHAR* pwzSource;
 };
 
-/*****************************************************************************
- * IDirectMusicScriptTrack implementation structure
- */
-struct IDirectMusicScriptTrack {
-  /* IUnknown fields */
-  const IUnknownVtbl *UnknownVtbl;
-  const IDirectMusicTrack8Vtbl *TrackVtbl;
-  const IPersistStreamVtbl *PersistStreamVtbl;
-  LONG           ref;
-
-  /* IDirectMusicScriptTrack fields */
-  LPDMUS_OBJECTDESC pDesc;
-};
-
 /**********************************************************************
  * Dll lifetime tracking declaration for dmscript.dll
  */
diff --git a/dlls/dmscript/scripttrack.c b/dlls/dmscript/scripttrack.c
index f27acb5..7b5a4ec 100644
--- a/dlls/dmscript/scripttrack.c
+++ b/dlls/dmscript/scripttrack.c
@@ -25,6 +25,21 @@ WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
  * IDirectMusicScriptTrack implementation
  */
 
+typedef struct DirectMusicScriptTrack {
+    const IUnknownVtbl *UnknownVtbl;
+    IDirectMusicTrack8 IDirectMusicTrack8_iface;
+    const IPersistStreamVtbl *PersistStreamVtbl;
+    LONG ref;
+    LPDMUS_OBJECTDESC pDesc;
+} DirectMusicScriptTrack;
+
+typedef struct DirectMusicScriptTrack IDirectMusicScriptTrack;
+
+static inline DirectMusicScriptTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
+{
+    return CONTAINING_RECORD(iface, DirectMusicScriptTrack, IDirectMusicTrack8_iface);
+}
+
 /* IDirectMusicScriptTrack IUnknown part: */
 static HRESULT WINAPI IDirectMusicScriptTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
 	ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
@@ -36,8 +51,8 @@ static HRESULT WINAPI IDirectMusicScriptTrack_IUnknown_QueryInterface (LPUNKNOWN
 		return S_OK;
 	} else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
 	  || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
-		*ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
-		IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
+		*ppobj = &This->IDirectMusicTrack8_iface;
+		IDirectMusicTrack_AddRef(&This->IDirectMusicTrack8_iface);
 		return S_OK;
 	} else if (IsEqualIID (riid, &IID_IPersistStream)) {
 		*ppobj = &This->PersistStreamVtbl;
@@ -83,28 +98,28 @@ static const IUnknownVtbl DirectMusicScriptTrack_Unknown_Vtbl = {
 
 /* IDirectMusicScriptTrack IDirectMusicTrack8 part: */
 static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
-        void **ppobj)
+        void **ret_iface)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
-	return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+    DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
+	return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ret_iface);
 }
 
 static ULONG WINAPI IDirectMusicTrack8Impl_AddRef(IDirectMusicTrack8 *iface)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+    DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	return IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 static ULONG WINAPI IDirectMusicTrack8Impl_Release(IDirectMusicTrack8 *iface)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+    DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	return IDirectMusicScriptTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
 }
 
 static HRESULT WINAPI IDirectMusicTrack8Impl_Init(IDirectMusicTrack8 *iface,
         IDirectMusicSegment *pSegment)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p): stub\n", This, pSegment);
 	return S_OK;
 }
@@ -113,14 +128,14 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay(IDirectMusicTrack8 *iface,
         IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
         void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p, %p, %p, %d, %d): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
 	return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p): stub\n", This, pStateData);
 	return S_OK;
 }
@@ -129,7 +144,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, voi
         MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
         IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p, %d, %d, %d, %d, %p, %p, %d): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
 	return S_OK;
 }
@@ -137,7 +152,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_Play(IDirectMusicTrack8 *iface, voi
 static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType,
         MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s, %d, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam);
 	return S_OK;
 }
@@ -145,7 +160,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_GetParam(IDirectMusicTrack8 *iface,
 static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface, REFGUID rguidType,
         MUSIC_TIME mtTime, void *pParam)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s, %d, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam);
 	return S_OK;
 }
@@ -153,7 +168,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_SetParam(IDirectMusicTrack8 *iface,
 static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8 *iface,
         REFGUID rguidType)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 
 	TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType));
 	/* didn't find any params */
@@ -164,7 +179,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported(IDirectMusicTrack8
 static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTrack8 *iface,
         REFGUID rguidNotificationType)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
 	return S_OK;
 }
@@ -172,7 +187,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType(IDirectMusicTra
 static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusicTrack8 *iface,
         REFGUID rguidNotificationType)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
 	return S_OK;
 }
@@ -180,7 +195,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType(IDirectMusic
 static HRESULT WINAPI IDirectMusicTrack8Impl_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
         MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %d, %d, %p): stub\n", This, mtStart, mtEnd, ppTrack);
 	return S_OK;
 }
@@ -189,7 +204,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx(IDirectMusicTrack8 *iface, v
         REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
         IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %d, %p, %p, %d): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
 	    wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
 	return S_OK;
@@ -199,7 +214,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *ifac
         REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam,
         void *pStateData, DWORD dwFlags)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s, 0x%s, %p, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType),
 	    wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags);
 	return S_OK;
@@ -208,7 +223,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx(IDirectMusicTrack8 *ifac
 static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *iface,
         REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %s, 0x%s, %p, %p, %d): stub\n", This, debugstr_dmguid(rguidType),
 	    wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags);
 	return S_OK;
@@ -217,7 +232,7 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx(IDirectMusicTrack8 *ifac
 static HRESULT WINAPI IDirectMusicTrack8Impl_Compose(IDirectMusicTrack8 *iface, IUnknown *pContext,
         DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p, %d, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
 	return S_OK;
 }
@@ -226,12 +241,12 @@ static HRESULT WINAPI IDirectMusicTrack8Impl_Join(IDirectMusicTrack8 *iface,
         IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup,
         IDirectMusicTrack **ppResultTrack)
 {
-	ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+	DirectMusicScriptTrack *This = impl_from_IDirectMusicTrack8(iface);
 	FIXME("(%p, %p, %d, %p, %d, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
 	return S_OK;
 }
 
-static const IDirectMusicTrack8Vtbl DirectMusicScriptTrack_Track_Vtbl = {
+static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
     IDirectMusicTrack8Impl_QueryInterface,
     IDirectMusicTrack8Impl_AddRef,
     IDirectMusicTrack8Impl_Release,
@@ -311,16 +326,22 @@ static const IPersistStreamVtbl DirectMusicScriptTrack_PersistStream_Vtbl = {
 };
 
 /* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
-	IDirectMusicScriptTrack* track;
-	
-	track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrack));
-	if (NULL == track) {
-		*ppobj = NULL;
-		return E_OUTOFMEMORY;
-	}
+HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack(LPCGUID lpcGUID, void **ppobj,
+        IUnknown *pUnkOuter)
+{
+    DirectMusicScriptTrack *track;
+
+    *ppobj = NULL;
+
+    if (pUnkOuter)
+        return CLASS_E_NOAGGREGATION;
+
+    track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*track));
+    if (!track)
+        return E_OUTOFMEMORY;
+
 	track->UnknownVtbl = &DirectMusicScriptTrack_Unknown_Vtbl;
-	track->TrackVtbl = &DirectMusicScriptTrack_Track_Vtbl;
+    track->IDirectMusicTrack8_iface.lpVtbl = &dmtrack8_vtbl;
 	track->PersistStreamVtbl = &DirectMusicScriptTrack_PersistStream_Vtbl;
 	track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
 	DM_STRUCT_INIT(track->pDesc);
-- 
1.8.3.1



More information about the wine-patches mailing list