1 /* DirectMusicComposer Main
3 * Copyright (C) 2003 Rok Mandeljc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #include "dmcompos_private.h"
22 WINE_DEFAULT_DEBUG_CHANNEL(dmcompos
);
27 ICOM_VFIELD(IClassFactory
);
31 /******************************************************************
32 * DirectMusicChordMap ClassFactory
34 static HRESULT WINAPI
ChordMapCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
)
36 ICOM_THIS(IClassFactoryImpl
,iface
);
38 FIXME("(%p)->(%s,%p),stub!\n",This
,debugstr_guid(riid
),ppobj
);
42 static ULONG WINAPI
ChordMapCF_AddRef(LPCLASSFACTORY iface
)
44 ICOM_THIS(IClassFactoryImpl
,iface
);
48 static ULONG WINAPI
ChordMapCF_Release(LPCLASSFACTORY iface
)
50 ICOM_THIS(IClassFactoryImpl
,iface
);
51 /* static class, won't be freed */
55 static HRESULT WINAPI
ChordMapCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
)
57 ICOM_THIS(IClassFactoryImpl
,iface
);
59 TRACE ("(%p)->(%p,%s,%p)\n", This
, pOuter
, debugstr_guid(riid
), ppobj
);
60 if (IsEqualIID (riid
, &IID_IDirectMusicChordMap
)) {
61 return DMUSIC_CreateDirectMusicChordMap (riid
, (LPDIRECTMUSICCHORDMAP
*)ppobj
, pOuter
);
62 } else if (IsEqualIID (riid
, &IID_IDirectMusicObject
)) {
63 return DMUSIC_CreateDirectMusicChordMapObject (riid
, (LPDIRECTMUSICOBJECT
*) ppobj
, pOuter
);
66 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
70 static HRESULT WINAPI
ChordMapCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
72 ICOM_THIS(IClassFactoryImpl
,iface
);
73 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
77 static ICOM_VTABLE(IClassFactory
) ChordMapCF_Vtbl
= {
78 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
79 ChordMapCF_QueryInterface
,
82 ChordMapCF_CreateInstance
,
86 static IClassFactoryImpl ChordMap_CF
= {&ChordMapCF_Vtbl
, 1 };
88 /******************************************************************
89 * DirectMusicComposer ClassFactory
91 static HRESULT WINAPI
ComposerCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
)
93 ICOM_THIS(IClassFactoryImpl
,iface
);
95 FIXME("(%p)->(%s,%p),stub!\n",This
,debugstr_guid(riid
),ppobj
);
99 static ULONG WINAPI
ComposerCF_AddRef(LPCLASSFACTORY iface
)
101 ICOM_THIS(IClassFactoryImpl
,iface
);
102 return ++(This
->ref
);
105 static ULONG WINAPI
ComposerCF_Release(LPCLASSFACTORY iface
)
107 ICOM_THIS(IClassFactoryImpl
,iface
);
108 /* static class, won't be freed */
109 return --(This
->ref
);
112 static HRESULT WINAPI
ComposerCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
)
114 ICOM_THIS(IClassFactoryImpl
,iface
);
116 TRACE ("(%p)->(%p,%s,%p)\n", This
, pOuter
, debugstr_guid(riid
), ppobj
);
117 if (IsEqualIID (riid
, &IID_IDirectMusicComposer
)) {
118 return DMUSIC_CreateDirectMusicComposer (riid
, (LPDIRECTMUSICCOMPOSER
*)ppobj
, pOuter
);
121 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
122 return E_NOINTERFACE
;
125 static HRESULT WINAPI
ComposerCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
127 ICOM_THIS(IClassFactoryImpl
,iface
);
128 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
132 static ICOM_VTABLE(IClassFactory
) ComposerCF_Vtbl
= {
133 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
134 ComposerCF_QueryInterface
,
137 ComposerCF_CreateInstance
,
138 ComposerCF_LockServer
141 static IClassFactoryImpl Composer_CF
= {&ComposerCF_Vtbl
, 1 };
143 /******************************************************************
144 * DirectMusicChordMapTrack ClassFactory
146 static HRESULT WINAPI
ChordMapTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
)
148 ICOM_THIS(IClassFactoryImpl
,iface
);
150 FIXME("(%p)->(%s,%p),stub!\n",This
,debugstr_guid(riid
),ppobj
);
151 return E_NOINTERFACE
;
154 static ULONG WINAPI
ChordMapTrackCF_AddRef(LPCLASSFACTORY iface
)
156 ICOM_THIS(IClassFactoryImpl
,iface
);
157 return ++(This
->ref
);
160 static ULONG WINAPI
ChordMapTrackCF_Release(LPCLASSFACTORY iface
)
162 ICOM_THIS(IClassFactoryImpl
,iface
);
163 /* static class, won't be freed */
164 return --(This
->ref
);
167 static HRESULT WINAPI
ChordMapTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
)
169 ICOM_THIS(IClassFactoryImpl
,iface
);
171 TRACE ("(%p)->(%p,%s,%p)\n", This
, pOuter
, debugstr_guid(riid
), ppobj
);
172 if (IsEqualIID (riid
, &IID_IDirectMusicTrack
)
173 || IsEqualIID (riid
, &IID_IDirectMusicTrack8
)) {
174 return DMUSIC_CreateDirectMusicChordMapTrack (riid
, (LPDIRECTMUSICTRACK8
*) ppobj
, pOuter
);
177 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
178 return E_NOINTERFACE
;
181 static HRESULT WINAPI
ChordMapTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
183 ICOM_THIS(IClassFactoryImpl
,iface
);
184 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
188 static ICOM_VTABLE(IClassFactory
) ChordMapTrackCF_Vtbl
= {
189 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
190 ChordMapTrackCF_QueryInterface
,
191 ChordMapTrackCF_AddRef
,
192 ChordMapTrackCF_Release
,
193 ChordMapTrackCF_CreateInstance
,
194 ChordMapTrackCF_LockServer
197 static IClassFactoryImpl ChordMapTrack_CF
= {&ChordMapTrackCF_Vtbl
, 1 };
199 /******************************************************************
200 * DirectMusicTemplate ClassFactory
202 static HRESULT WINAPI
TemplateCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
)
204 ICOM_THIS(IClassFactoryImpl
,iface
);
206 FIXME("(%p)->(%s,%p),stub!\n",This
,debugstr_guid(riid
),ppobj
);
207 return E_NOINTERFACE
;
210 static ULONG WINAPI
TemplateCF_AddRef(LPCLASSFACTORY iface
)
212 ICOM_THIS(IClassFactoryImpl
,iface
);
213 return ++(This
->ref
);
216 static ULONG WINAPI
TemplateCF_Release(LPCLASSFACTORY iface
)
218 ICOM_THIS(IClassFactoryImpl
,iface
);
219 /* static class, won't be freed */
220 return --(This
->ref
);
223 static HRESULT WINAPI
TemplateCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
)
225 ICOM_THIS(IClassFactoryImpl
,iface
);
227 TRACE ("(%p)->(%p,%s,%p)\n", This
, pOuter
, debugstr_guid(riid
), ppobj
);
231 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
232 return E_NOINTERFACE
;
235 static HRESULT WINAPI
TemplateCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
237 ICOM_THIS(IClassFactoryImpl
,iface
);
238 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
242 static ICOM_VTABLE(IClassFactory
) TemplateCF_Vtbl
= {
243 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
244 TemplateCF_QueryInterface
,
247 TemplateCF_CreateInstance
,
248 TemplateCF_LockServer
251 static IClassFactoryImpl Template_CF
= {&TemplateCF_Vtbl
, 1 };
253 /******************************************************************
254 * DirectMusicSignPostTrack ClassFactory
256 static HRESULT WINAPI
SignPostTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
)
258 ICOM_THIS(IClassFactoryImpl
,iface
);
260 FIXME("(%p)->(%s,%p),stub!\n",This
,debugstr_guid(riid
),ppobj
);
261 return E_NOINTERFACE
;
264 static ULONG WINAPI
SignPostTrackCF_AddRef(LPCLASSFACTORY iface
)
266 ICOM_THIS(IClassFactoryImpl
,iface
);
267 return ++(This
->ref
);
270 static ULONG WINAPI
SignPostTrackCF_Release(LPCLASSFACTORY iface
)
272 ICOM_THIS(IClassFactoryImpl
,iface
);
273 /* static class, won't be freed */
274 return --(This
->ref
);
277 static HRESULT WINAPI
SignPostTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
)
279 ICOM_THIS(IClassFactoryImpl
,iface
);
281 TRACE ("(%p)->(%p,%s,%p)\n", This
, pOuter
, debugstr_guid(riid
), ppobj
);
282 if (IsEqualIID (riid
, &IID_IDirectMusicTrack
)
283 || IsEqualIID (riid
, &IID_IDirectMusicTrack8
)) {
284 return DMUSIC_CreateDirectMusicSignPostTrack (riid
, (LPDIRECTMUSICTRACK8
*) ppobj
, pOuter
);
287 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
288 return E_NOINTERFACE
;
291 static HRESULT WINAPI
SignPostTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
293 ICOM_THIS(IClassFactoryImpl
,iface
);
294 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
298 static ICOM_VTABLE(IClassFactory
) SignPostTrackCF_Vtbl
= {
299 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
300 SignPostTrackCF_QueryInterface
,
301 SignPostTrackCF_AddRef
,
302 SignPostTrackCF_Release
,
303 SignPostTrackCF_CreateInstance
,
304 SignPostTrackCF_LockServer
307 static IClassFactoryImpl SignPostTrack_CF
= {&SignPostTrackCF_Vtbl
, 1 };
309 /******************************************************************
314 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
316 if (fdwReason
== DLL_PROCESS_ATTACH
)
318 DisableThreadLibraryCalls(hinstDLL
);
319 /* FIXME: Initialisation */
321 else if (fdwReason
== DLL_PROCESS_DETACH
)
330 /******************************************************************
331 * DllCanUnloadNow (DMCOMPOS.1)
335 HRESULT WINAPI
DMCOMPOS_DllCanUnloadNow(void)
337 FIXME("(void): stub\n");
343 /******************************************************************
344 * DllGetClassObject (DMCOMPOS.2)
348 HRESULT WINAPI
DMCOMPOS_DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
350 TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
351 if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicChordMap
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
352 *ppv
= (LPVOID
) &ChordMap_CF
;
353 IClassFactory_AddRef((IClassFactory
*)*ppv
);
355 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicComposer
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
356 *ppv
= (LPVOID
) &Composer_CF
;
357 IClassFactory_AddRef((IClassFactory
*)*ppv
);
359 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicChordMapTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
360 *ppv
= (LPVOID
) &ChordMapTrack_CF
;
361 IClassFactory_AddRef((IClassFactory
*)*ppv
);
363 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicTemplate
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
364 *ppv
= (LPVOID
) &Template_CF
;
365 IClassFactory_AddRef((IClassFactory
*)*ppv
);
367 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicSignPostTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
368 *ppv
= (LPVOID
) &SignPostTrack_CF
;
369 IClassFactory_AddRef((IClassFactory
*)*ppv
);
373 WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
374 return CLASS_E_CLASSNOTAVAILABLE
;