dmscript: COM cleanup for IDirectMusicTrack8 from DirectMusicScriptTrack.

oldstable
Michael Stefaniuc 2014-01-12 22:09:30 +01:00 committed by Alexandre Julliard
parent c56151fa7b
commit 7b3c630715
2 changed files with 53 additions and 48 deletions

View File

@ -47,8 +47,6 @@
*/ */
typedef struct IDirectMusicScriptImpl IDirectMusicScriptImpl; typedef struct IDirectMusicScriptImpl IDirectMusicScriptImpl;
typedef struct IDirectMusicScriptTrack IDirectMusicScriptTrack;
/***************************************************************************** /*****************************************************************************
* ClassFactory * ClassFactory
*/ */
@ -74,20 +72,6 @@ struct IDirectMusicScriptImpl {
WCHAR* pwzSource; 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 * Dll lifetime tracking declaration for dmscript.dll
*/ */

View File

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