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 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
*/

View File

@ -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);