| /* DirectMusicInteractiveEngine Main | |
| * | |
| * Copyright (C) 2003-2004 Rok Mandeljc | |
| * Copyright (C) 2003-2004 Raphael Junqueira | |
| * | |
| * 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 | |
| * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Library General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| */ | |
| #include "dmime_private.h" | |
| WINE_DEFAULT_DEBUG_CHANNEL(dmime); | |
| WINE_DECLARE_DEBUG_CHANNEL(dmfile); | |
| LONG DMIME_refCount = 0; | |
| typedef struct { | |
| IClassFactoryVtbl *lpVtbl; | |
| } IClassFactoryImpl; | |
| /****************************************************************** | |
| * DirectMusicPerformance ClassFactory | |
| */ | |
| static HRESULT WINAPI PerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI PerformanceCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI PerformanceCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI PerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicPerformanceImpl (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI PerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl PerformanceCF_Vtbl = { | |
| PerformanceCF_QueryInterface, | |
| PerformanceCF_AddRef, | |
| PerformanceCF_Release, | |
| PerformanceCF_CreateInstance, | |
| PerformanceCF_LockServer | |
| }; | |
| static IClassFactoryImpl Performance_CF = {&PerformanceCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicSegment ClassFactory | |
| */ | |
| static HRESULT WINAPI SegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI SegmentCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI SegmentCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI SegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicSegmentImpl (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI SegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl SegmentCF_Vtbl = { | |
| SegmentCF_QueryInterface, | |
| SegmentCF_AddRef, | |
| SegmentCF_Release, | |
| SegmentCF_CreateInstance, | |
| SegmentCF_LockServer | |
| }; | |
| static IClassFactoryImpl Segment_CF = {&SegmentCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicSegmentState ClassFactory | |
| */ | |
| static HRESULT WINAPI SegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI SegmentStateCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based objects */ | |
| } | |
| static ULONG WINAPI SegmentStateCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI SegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicSegmentStateImpl (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI SegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl SegmentStateCF_Vtbl = { | |
| SegmentStateCF_QueryInterface, | |
| SegmentStateCF_AddRef, | |
| SegmentStateCF_Release, | |
| SegmentStateCF_CreateInstance, | |
| SegmentStateCF_LockServer | |
| }; | |
| static IClassFactoryImpl SegmentState_CF = {&SegmentStateCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicGraph ClassFactory | |
| */ | |
| static HRESULT WINAPI GraphCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI GraphCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI GraphCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI GraphCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicGraphImpl (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI GraphCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl GraphCF_Vtbl = { | |
| GraphCF_QueryInterface, | |
| GraphCF_AddRef, | |
| GraphCF_Release, | |
| GraphCF_CreateInstance, | |
| GraphCF_LockServer | |
| }; | |
| static IClassFactoryImpl Graph_CF = {&GraphCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicTempoTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI TempoTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI TempoTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI TempoTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI TempoTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicTempoTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI TempoTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl TempoTrackCF_Vtbl = { | |
| TempoTrackCF_QueryInterface, | |
| TempoTrackCF_AddRef, | |
| TempoTrackCF_Release, | |
| TempoTrackCF_CreateInstance, | |
| TempoTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl TempoTrack_CF = {&TempoTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicSeqTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI SeqTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI SeqTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI SeqTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI SeqTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicSeqTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI SeqTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl SeqTrackCF_Vtbl = { | |
| SeqTrackCF_QueryInterface, | |
| SeqTrackCF_AddRef, | |
| SeqTrackCF_Release, | |
| SeqTrackCF_CreateInstance, | |
| SeqTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl SeqTrack_CF = {&SeqTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicSysExTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI SysExTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI SysExTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI SysExTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI SysExTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicSysExTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI SysExTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl SysExTrackCF_Vtbl = { | |
| SysExTrackCF_QueryInterface, | |
| SysExTrackCF_AddRef, | |
| SysExTrackCF_Release, | |
| SysExTrackCF_CreateInstance, | |
| SysExTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl SysExTrack_CF = {&SysExTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicTimeSigTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI TimeSigTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI TimeSigTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI TimeSigTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI TimeSigTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicTimeSigTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI TimeSigTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl TimeSigTrackCF_Vtbl = { | |
| TimeSigTrackCF_QueryInterface, | |
| TimeSigTrackCF_AddRef, | |
| TimeSigTrackCF_Release, | |
| TimeSigTrackCF_CreateInstance, | |
| TimeSigTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl TimeSigTrack_CF = {&TimeSigTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicParamControlTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI ParamControlTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI ParamControlTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI ParamControlTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI ParamControlTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicParamControlTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI ParamControlTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl ParamControlTrackCF_Vtbl = { | |
| ParamControlTrackCF_QueryInterface, | |
| ParamControlTrackCF_AddRef, | |
| ParamControlTrackCF_Release, | |
| ParamControlTrackCF_CreateInstance, | |
| ParamControlTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl ParamControlTrack_CF = {&ParamControlTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicMarkerTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI MarkerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI MarkerTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI MarkerTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI MarkerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicMarkerTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI MarkerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl MarkerTrackCF_Vtbl = { | |
| MarkerTrackCF_QueryInterface, | |
| MarkerTrackCF_AddRef, | |
| MarkerTrackCF_Release, | |
| MarkerTrackCF_CreateInstance, | |
| MarkerTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl MarkerTrack_CF = {&MarkerTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicLyricsTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI LyricsTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI LyricsTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI LyricsTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI LyricsTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicLyricsTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI LyricsTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl LyricsTrackCF_Vtbl = { | |
| LyricsTrackCF_QueryInterface, | |
| LyricsTrackCF_AddRef, | |
| LyricsTrackCF_Release, | |
| LyricsTrackCF_CreateInstance, | |
| LyricsTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl LyricsTrack_CF = {&LyricsTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicSegTriggerTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI SegTriggerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI SegTriggerTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI SegTriggerTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI SegTriggerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicSegTriggerTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI SegTriggerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl SegTriggerTrackCF_Vtbl = { | |
| SegTriggerTrackCF_QueryInterface, | |
| SegTriggerTrackCF_AddRef, | |
| SegTriggerTrackCF_Release, | |
| SegTriggerTrackCF_CreateInstance, | |
| SegTriggerTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl SegTriggerTrack_CF = {&SegTriggerTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicAudioPath ClassFactory | |
| */ | |
| static HRESULT WINAPI AudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI AudioPathCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI AudioPathCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI AudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicAudioPathImpl (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI AudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl AudioPathCF_Vtbl = { | |
| AudioPathCF_QueryInterface, | |
| AudioPathCF_AddRef, | |
| AudioPathCF_Release, | |
| AudioPathCF_CreateInstance, | |
| AudioPathCF_LockServer | |
| }; | |
| static IClassFactoryImpl AudioPath_CF = {&AudioPathCF_Vtbl}; | |
| /****************************************************************** | |
| * DirectMusicWaveTrack ClassFactory | |
| */ | |
| static HRESULT WINAPI WaveTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { | |
| FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid)); | |
| if (ppobj == NULL) return E_POINTER; | |
| return E_NOINTERFACE; | |
| } | |
| static ULONG WINAPI WaveTrackCF_AddRef(LPCLASSFACTORY iface) { | |
| DMIME_LockModule(); | |
| return 2; /* non-heap based object */ | |
| } | |
| static ULONG WINAPI WaveTrackCF_Release(LPCLASSFACTORY iface) { | |
| DMIME_UnlockModule(); | |
| return 1; /* non-heap based object */ | |
| } | |
| static HRESULT WINAPI WaveTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { | |
| TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); | |
| return DMUSIC_CreateDirectMusicWaveTrack (riid, ppobj, pOuter); | |
| } | |
| static HRESULT WINAPI WaveTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { | |
| TRACE("(%d)\n", dolock); | |
| if (dolock) | |
| DMIME_LockModule(); | |
| else | |
| DMIME_UnlockModule(); | |
| return S_OK; | |
| } | |
| static IClassFactoryVtbl WaveTrackCF_Vtbl = { | |
| WaveTrackCF_QueryInterface, | |
| WaveTrackCF_AddRef, | |
| WaveTrackCF_Release, | |
| WaveTrackCF_CreateInstance, | |
| WaveTrackCF_LockServer | |
| }; | |
| static IClassFactoryImpl WaveTrack_CF = {&WaveTrackCF_Vtbl}; | |
| /****************************************************************** | |
| * DllMain | |
| * | |
| * | |
| */ | |
| BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { | |
| if (fdwReason == DLL_PROCESS_ATTACH) { | |
| DisableThreadLibraryCalls(hinstDLL); | |
| /* FIXME: Initialisation */ | |
| } | |
| else if (fdwReason == DLL_PROCESS_DETACH) { | |
| /* FIXME: Cleanup */ | |
| } | |
| return TRUE; | |
| } | |
| /****************************************************************** | |
| * DllCanUnloadNow (DMIME.1) | |
| * | |
| * | |
| */ | |
| HRESULT WINAPI DMIME_DllCanUnloadNow(void) { | |
| return DMIME_refCount != 0 ? S_FALSE : S_OK; | |
| } | |
| /****************************************************************** | |
| * DllGetClassObject (DMIME.2) | |
| * | |
| * | |
| */ | |
| HRESULT WINAPI DMIME_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) | |
| { | |
| TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv); | |
| if (IsEqualCLSID (rclsid, &CLSID_DirectMusicPerformance) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &Performance_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegment) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &Segment_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegmentState) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &SegmentState_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicGraph) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &Graph_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTempoTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &TempoTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSeqTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &SeqTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSysExTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &SysExTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTimeSigTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &TimeSigTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicParamControlTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &ParamControlTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMarkerTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &MarkerTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicLyricsTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &LyricsTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegTriggerTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &SegTriggerTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicAudioPath) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &AudioPath_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicWaveTrack) && IsEqualIID (riid, &IID_IClassFactory)) { | |
| *ppv = (LPVOID) &WaveTrack_CF; | |
| IClassFactory_AddRef((IClassFactory*)*ppv); | |
| return S_OK; | |
| } | |
| WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv); | |
| return CLASS_E_CLASSNOTAVAILABLE; | |
| } |