- updated resources to DX9
- completely rewritten headers (DX9 compat.; look much nicer now ;=)
- removed IDirectMusicSong and IDirectMusicMelodyFormulationTrack
(which are removed from DX9; weren't implemented in DX8 anyway)
- combined/simplified IDirectMusicSomething / IDirectMusicObject /
IPersistStream for objects that support loading
- implemented IDirectMusicObject on all such objects; via generic
functions
- combined IDirectMusicTrack(8)/IPersistStream on all tracks
- fully implemented IDirectMusicContainer (at least 90% if there are
no private interfaces)
- implemented IDirectMusicCollection (99% work & MS compliant
behaviour; except for instruments)
- tried to implement IDirectMusicInstrument (unfortunately uses some
dirty private interfaces... :(
- added dswave.dll; DirectMusic Wave
- some changes in style
- many, many more ;)
diff --git a/dlls/dmscript/scripttrack.c b/dlls/dmscript/scripttrack.c
index 3c47d4b..f28c1c5 100644
--- a/dlls/dmscript/scripttrack.c
+++ b/dlls/dmscript/scripttrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicScriptTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmscript_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
@@ -34,19 +26,21 @@
* IDirectMusicScriptTrack implementation
*/
/* IDirectMusicScriptTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicScriptTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+HRESULT WINAPI IDirectMusicScriptTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicScriptTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicScriptTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicScriptTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicScriptTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ULONG WINAPI IDirectMusicScriptTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicScriptTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ULONG WINAPI IDirectMusicScriptTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,270 +64,214 @@
return ref;
}
-/* IDirectMusicScriptTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicScriptTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicScriptTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicScriptTrack_IUnknown_QueryInterface,
+ IDirectMusicScriptTrack_IUnknown_AddRef,
+ IDirectMusicScriptTrack_IUnknown_Release
+};
+/* IDirectMusicScriptTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicScriptTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicScriptTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicScriptTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptTrack_QueryInterface,
- IDirectMusicScriptTrack_AddRef,
- IDirectMusicScriptTrack_Release,
- IDirectMusicScriptTrack_Init,
- IDirectMusicScriptTrack_InitPlay,
- IDirectMusicScriptTrack_EndPlay,
- IDirectMusicScriptTrack_Play,
- IDirectMusicScriptTrack_GetParam,
- IDirectMusicScriptTrack_SetParam,
- IDirectMusicScriptTrack_IsParamSupported,
- IDirectMusicScriptTrack_AddNotificationType,
- IDirectMusicScriptTrack_RemoveNotificationType,
- IDirectMusicScriptTrack_Clone,
- IDirectMusicScriptTrack_PlayEx,
- IDirectMusicScriptTrack_GetParamEx,
- IDirectMusicScriptTrack_SetParamEx,
- IDirectMusicScriptTrack_Compose,
- IDirectMusicScriptTrack_Join
+ IDirectMusicScriptTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Release,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Init,
+ IDirectMusicScriptTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicScriptTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Play,
+ IDirectMusicScriptTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicScriptTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicScriptTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicScriptTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Clone,
+ IDirectMusicScriptTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Compose,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicScriptTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicScriptTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrackStream));
- track->pStream->lpVtbl = &DirectMusicScriptTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicScriptTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicScriptTrackStream implementation
- */
-/* IDirectMusicScriptTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicScriptTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicScriptTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicScriptTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicScriptTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- *pClassID = CLSID_DirectMusicScriptTrack;
- return S_OK;
-}
-
-/* IDirectMusicScriptTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicScriptTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicScriptTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptTrackStream_QueryInterface,
- IDirectMusicScriptTrackStream_AddRef,
- IDirectMusicScriptTrackStream_Release,
- IDirectMusicScriptTrackStream_GetClassID,
- IDirectMusicScriptTrackStream_IsDirty,
- IDirectMusicScriptTrackStream_Load,
- IDirectMusicScriptTrackStream_Save,
- IDirectMusicScriptTrackStream_GetSizeMax
+ IDirectMusicScriptTrack_IPersistStream_QueryInterface,
+ IDirectMusicScriptTrack_IPersistStream_AddRef,
+ IDirectMusicScriptTrack_IPersistStream_Release,
+ IDirectMusicScriptTrack_IPersistStream_GetClassID,
+ IDirectMusicScriptTrack_IPersistStream_IsDirty,
+ IDirectMusicScriptTrack_IPersistStream_Load,
+ IDirectMusicScriptTrack_IPersistStream_Save,
+ IDirectMusicScriptTrack_IPersistStream_GetSizeMax
};
+
+/* 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 = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicScriptTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicScriptTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicScriptTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicScriptTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}