Print exe name when initialization fails.
[wine] / dlls / dmstyle / dmstyle_main.c
1 /* DirectMusicStyle Main
2  *
3  * Copyright (C) 2003 Rok Mandeljc
4  *
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.
9  *
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.
14  *
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.
18  */
19
20 #include "dmstyle_private.h"
21
22 WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
23
24 typedef struct
25 {
26     /* IUnknown fields */
27     ICOM_VFIELD(IClassFactory);
28     DWORD                       ref;
29 } IClassFactoryImpl;
30
31 /******************************************************************
32  *              DirectMusicSection ClassFactory
33  */
34 static HRESULT WINAPI SectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
35 {
36         ICOM_THIS(IClassFactoryImpl,iface);
37
38         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
39         return E_NOINTERFACE;
40 }
41
42 static ULONG WINAPI SectionCF_AddRef(LPCLASSFACTORY iface)
43 {
44         ICOM_THIS(IClassFactoryImpl,iface);
45         return ++(This->ref);
46 }
47
48 static ULONG WINAPI SectionCF_Release(LPCLASSFACTORY iface)
49 {
50         ICOM_THIS(IClassFactoryImpl,iface);
51         /* static class, won't be  freed */
52         return --(This->ref);
53 }
54
55 static HRESULT WINAPI SectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
56 {
57         ICOM_THIS(IClassFactoryImpl,iface);
58
59         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
60
61         /* nothing here yet */
62         
63         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
64         return E_NOINTERFACE;
65 }
66
67 static HRESULT WINAPI SectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
68 {
69         ICOM_THIS(IClassFactoryImpl,iface);
70         FIXME("(%p)->(%d),stub!\n", This, dolock);
71         return S_OK;
72 }
73
74 static ICOM_VTABLE(IClassFactory) SectionCF_Vtbl = {
75         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
76         SectionCF_QueryInterface,
77         SectionCF_AddRef,
78         SectionCF_Release,
79         SectionCF_CreateInstance,
80         SectionCF_LockServer
81 };
82
83 static IClassFactoryImpl Section_CF = {&SectionCF_Vtbl, 1 };
84
85 /******************************************************************
86  *              DirectMusicStyle ClassFactory
87  */
88 static HRESULT WINAPI StyleCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
89 {
90         ICOM_THIS(IClassFactoryImpl,iface);
91
92         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
93         return E_NOINTERFACE;
94 }
95
96 static ULONG WINAPI StyleCF_AddRef(LPCLASSFACTORY iface)
97 {
98         ICOM_THIS(IClassFactoryImpl,iface);
99         return ++(This->ref);
100 }
101
102 static ULONG WINAPI StyleCF_Release(LPCLASSFACTORY iface)
103 {
104         ICOM_THIS(IClassFactoryImpl,iface);
105         /* static class, won't be  freed */
106         return --(This->ref);
107 }
108
109 static HRESULT WINAPI StyleCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
110 {
111         ICOM_THIS(IClassFactoryImpl,iface);
112
113         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
114         if (IsEqualIID (riid, &IID_IDirectMusicStyle) ||
115                 IsEqualIID (riid, &IID_IDirectMusicStyle8)) {
116                 return DMUSIC_CreateDirectMusicStyle (riid, (LPDIRECTMUSICSTYLE8*)ppobj, pOuter);
117         } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
118                 return DMUSIC_CreateDirectMusicStyleObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
119         }
120         
121         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
122         return E_NOINTERFACE;
123 }
124
125 static HRESULT WINAPI StyleCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
126 {
127         ICOM_THIS(IClassFactoryImpl,iface);
128         FIXME("(%p)->(%d),stub!\n", This, dolock);
129         return S_OK;
130 }
131
132 static ICOM_VTABLE(IClassFactory) StyleCF_Vtbl = {
133         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
134         StyleCF_QueryInterface,
135         StyleCF_AddRef,
136         StyleCF_Release,
137         StyleCF_CreateInstance,
138         StyleCF_LockServer
139 };
140
141 static IClassFactoryImpl Style_CF = {&StyleCF_Vtbl, 1 };
142
143 /******************************************************************
144  *              DirectMusicChordTrack ClassFactory
145  */
146 static HRESULT WINAPI ChordTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
147 {
148         ICOM_THIS(IClassFactoryImpl,iface);
149
150         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
151         return E_NOINTERFACE;
152 }
153
154 static ULONG WINAPI ChordTrackCF_AddRef(LPCLASSFACTORY iface)
155 {
156         ICOM_THIS(IClassFactoryImpl,iface);
157         return ++(This->ref);
158 }
159
160 static ULONG WINAPI ChordTrackCF_Release(LPCLASSFACTORY iface)
161 {
162         ICOM_THIS(IClassFactoryImpl,iface);
163         /* static class, won't be  freed */
164         return --(This->ref);
165 }
166
167 static HRESULT WINAPI ChordTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
168 {
169         ICOM_THIS(IClassFactoryImpl,iface);
170
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_CreateDirectMusicChordTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
175         }
176         
177         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
178         return E_NOINTERFACE;
179 }
180
181 static HRESULT WINAPI ChordTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
182 {
183         ICOM_THIS(IClassFactoryImpl,iface);
184         FIXME("(%p)->(%d),stub!\n", This, dolock);
185         return S_OK;
186 }
187
188 static ICOM_VTABLE(IClassFactory) ChordTrackCF_Vtbl = {
189         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
190         ChordTrackCF_QueryInterface,
191         ChordTrackCF_AddRef,
192         ChordTrackCF_Release,
193         ChordTrackCF_CreateInstance,
194         ChordTrackCF_LockServer
195 };
196
197 static IClassFactoryImpl ChordTrack_CF = {&ChordTrackCF_Vtbl, 1 };
198
199 /******************************************************************
200  *              DirectMusicCommandTrack ClassFactory
201  */
202 static HRESULT WINAPI CommandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
203 {
204         ICOM_THIS(IClassFactoryImpl,iface);
205
206         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
207         return E_NOINTERFACE;
208 }
209
210 static ULONG WINAPI CommandTrackCF_AddRef(LPCLASSFACTORY iface)
211 {
212         ICOM_THIS(IClassFactoryImpl,iface);
213         return ++(This->ref);
214 }
215
216 static ULONG WINAPI CommandTrackCF_Release(LPCLASSFACTORY iface)
217 {
218         ICOM_THIS(IClassFactoryImpl,iface);
219         /* static class, won't be  freed */
220         return --(This->ref);
221 }
222
223 static HRESULT WINAPI CommandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
224 {
225         ICOM_THIS(IClassFactoryImpl,iface);
226
227         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
228         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
229                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
230                 return DMUSIC_CreateDirectMusicCommandTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
231         }
232         
233         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
234         return E_NOINTERFACE;
235 }
236
237 static HRESULT WINAPI CommandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
238 {
239         ICOM_THIS(IClassFactoryImpl,iface);
240         FIXME("(%p)->(%d),stub!\n", This, dolock);
241         return S_OK;
242 }
243
244 static ICOM_VTABLE(IClassFactory) CommandTrackCF_Vtbl = {
245         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
246         CommandTrackCF_QueryInterface,
247         CommandTrackCF_AddRef,
248         CommandTrackCF_Release,
249         CommandTrackCF_CreateInstance,
250         CommandTrackCF_LockServer
251 };
252
253 static IClassFactoryImpl CommandTrack_CF = {&CommandTrackCF_Vtbl, 1 };
254
255 /******************************************************************
256  *              DirectMusicStyleTrack ClassFactory
257  */
258 static HRESULT WINAPI StyleTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
259 {
260         ICOM_THIS(IClassFactoryImpl,iface);
261
262         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
263         return E_NOINTERFACE;
264 }
265
266 static ULONG WINAPI StyleTrackCF_AddRef(LPCLASSFACTORY iface)
267 {
268         ICOM_THIS(IClassFactoryImpl,iface);
269         return ++(This->ref);
270 }
271
272 static ULONG WINAPI StyleTrackCF_Release(LPCLASSFACTORY iface)
273 {
274         ICOM_THIS(IClassFactoryImpl,iface);
275         /* static class, won't be  freed */
276         return --(This->ref);
277 }
278
279 static HRESULT WINAPI StyleTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
280 {
281         ICOM_THIS(IClassFactoryImpl,iface);
282
283         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
284         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
285                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
286                 return DMUSIC_CreateDirectMusicStyleTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
287         }
288         
289         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
290         return E_NOINTERFACE;
291 }
292
293 static HRESULT WINAPI StyleTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
294 {
295         ICOM_THIS(IClassFactoryImpl,iface);
296         FIXME("(%p)->(%d),stub!\n", This, dolock);
297         return S_OK;
298 }
299
300 static ICOM_VTABLE(IClassFactory) StyleTrackCF_Vtbl = {
301         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
302         StyleTrackCF_QueryInterface,
303         StyleTrackCF_AddRef,
304         StyleTrackCF_Release,
305         StyleTrackCF_CreateInstance,
306         StyleTrackCF_LockServer
307 };
308
309 static IClassFactoryImpl StyleTrack_CF = {&StyleTrackCF_Vtbl, 1 };
310
311 /******************************************************************
312  *              DirectMusicMotifTrack ClassFactory
313  */
314 static HRESULT WINAPI MotifTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
315 {
316         ICOM_THIS(IClassFactoryImpl,iface);
317
318         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
319         return E_NOINTERFACE;
320 }
321
322 static ULONG WINAPI MotifTrackCF_AddRef(LPCLASSFACTORY iface)
323 {
324         ICOM_THIS(IClassFactoryImpl,iface);
325         return ++(This->ref);
326 }
327
328 static ULONG WINAPI MotifTrackCF_Release(LPCLASSFACTORY iface)
329 {
330         ICOM_THIS(IClassFactoryImpl,iface);
331         /* static class, won't be  freed */
332         return --(This->ref);
333 }
334
335 static HRESULT WINAPI MotifTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
336 {
337         ICOM_THIS(IClassFactoryImpl,iface);
338
339         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
340         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
341                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
342                 return DMUSIC_CreateDirectMusicMotifTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
343         }
344         
345         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
346         return E_NOINTERFACE;
347 }
348
349 static HRESULT WINAPI MotifTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
350 {
351         ICOM_THIS(IClassFactoryImpl,iface);
352         FIXME("(%p)->(%d),stub!\n", This, dolock);
353         return S_OK;
354 }
355
356 static ICOM_VTABLE(IClassFactory) MotifTrackCF_Vtbl = {
357         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
358         MotifTrackCF_QueryInterface,
359         MotifTrackCF_AddRef,
360         MotifTrackCF_Release,
361         MotifTrackCF_CreateInstance,
362         MotifTrackCF_LockServer
363 };
364
365 static IClassFactoryImpl MotifTrack_CF = {&MotifTrackCF_Vtbl, 1 };
366
367 /******************************************************************
368  *              DirectMusicAuditionTrack ClassFactory
369  */
370 static HRESULT WINAPI AuditionTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
371 {
372         ICOM_THIS(IClassFactoryImpl,iface);
373
374         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
375         return E_NOINTERFACE;
376 }
377
378 static ULONG WINAPI AuditionTrackCF_AddRef(LPCLASSFACTORY iface)
379 {
380         ICOM_THIS(IClassFactoryImpl,iface);
381         return ++(This->ref);
382 }
383
384 static ULONG WINAPI AuditionTrackCF_Release(LPCLASSFACTORY iface)
385 {
386         ICOM_THIS(IClassFactoryImpl,iface);
387         /* static class, won't be  freed */
388         return --(This->ref);
389 }
390
391 static HRESULT WINAPI AuditionTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
392 {
393         ICOM_THIS(IClassFactoryImpl,iface);
394
395         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
396         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
397                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
398                 return DMUSIC_CreateDirectMusicAuditionTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
399         }
400         
401         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
402         return E_NOINTERFACE;
403 }
404
405 static HRESULT WINAPI AuditionTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
406 {
407         ICOM_THIS(IClassFactoryImpl,iface);
408         FIXME("(%p)->(%d),stub!\n", This, dolock);
409         return S_OK;
410 }
411
412 static ICOM_VTABLE(IClassFactory) AuditionTrackCF_Vtbl = {
413         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
414         AuditionTrackCF_QueryInterface,
415         AuditionTrackCF_AddRef,
416         AuditionTrackCF_Release,
417         AuditionTrackCF_CreateInstance,
418         AuditionTrackCF_LockServer
419 };
420
421 static IClassFactoryImpl AuditionTrack_CF = {&AuditionTrackCF_Vtbl, 1 };
422
423 /******************************************************************
424  *              DirectMusicMuteTrack ClassFactory
425  */
426 static HRESULT WINAPI MuteTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
427 {
428         ICOM_THIS(IClassFactoryImpl,iface);
429
430         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
431         return E_NOINTERFACE;
432 }
433
434 static ULONG WINAPI MuteTrackCF_AddRef(LPCLASSFACTORY iface)
435 {
436         ICOM_THIS(IClassFactoryImpl,iface);
437         return ++(This->ref);
438 }
439
440 static ULONG WINAPI MuteTrackCF_Release(LPCLASSFACTORY iface)
441 {
442         ICOM_THIS(IClassFactoryImpl,iface);
443         /* static class, won't be  freed */
444         return --(This->ref);
445 }
446
447 static HRESULT WINAPI MuteTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
448 {
449         ICOM_THIS(IClassFactoryImpl,iface);
450
451         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
452         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
453                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
454                 return DMUSIC_CreateDirectMusicMuteTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
455         }
456         
457         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
458         return E_NOINTERFACE;
459 }
460
461 static HRESULT WINAPI MuteTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
462 {
463         ICOM_THIS(IClassFactoryImpl,iface);
464         FIXME("(%p)->(%d),stub!\n", This, dolock);
465         return S_OK;
466 }
467
468 static ICOM_VTABLE(IClassFactory) MuteTrackCF_Vtbl = {
469         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
470         MuteTrackCF_QueryInterface,
471         MuteTrackCF_AddRef,
472         MuteTrackCF_Release,
473         MuteTrackCF_CreateInstance,
474         MuteTrackCF_LockServer
475 };
476
477 static IClassFactoryImpl MuteTrack_CF = {&MuteTrackCF_Vtbl, 1 };
478
479 /******************************************************************
480  *              DirectMusicMelodyFormulationTrack ClassFactory
481  */
482 static HRESULT WINAPI MelodyFormulationTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
483 {
484         ICOM_THIS(IClassFactoryImpl,iface);
485
486         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
487         return E_NOINTERFACE;
488 }
489
490 static ULONG WINAPI MelodyFormulationTrackCF_AddRef(LPCLASSFACTORY iface)
491 {
492         ICOM_THIS(IClassFactoryImpl,iface);
493         return ++(This->ref);
494 }
495
496 static ULONG WINAPI MelodyFormulationTrackCF_Release(LPCLASSFACTORY iface)
497 {
498         ICOM_THIS(IClassFactoryImpl,iface);
499         /* static class, won't be  freed */
500         return --(This->ref);
501 }
502
503 static HRESULT WINAPI MelodyFormulationTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
504 {
505         ICOM_THIS(IClassFactoryImpl,iface);
506
507         TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
508         if (IsEqualIID (riid, &IID_IDirectMusicTrack) 
509                 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
510                 return DMUSIC_CreateDirectMusicMelodyFormulationTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
511         }
512         
513         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
514         return E_NOINTERFACE;
515 }
516
517 static HRESULT WINAPI MelodyFormulationTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
518 {
519         ICOM_THIS(IClassFactoryImpl,iface);
520         FIXME("(%p)->(%d),stub!\n", This, dolock);
521         return S_OK;
522 }
523
524 static ICOM_VTABLE(IClassFactory) MelodyFormulationTrackCF_Vtbl = {
525         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
526         MelodyFormulationTrackCF_QueryInterface,
527         MelodyFormulationTrackCF_AddRef,
528         MelodyFormulationTrackCF_Release,
529         MelodyFormulationTrackCF_CreateInstance,
530         MelodyFormulationTrackCF_LockServer
531 };
532
533 static IClassFactoryImpl MelodyFormulationTrack_CF = {&MelodyFormulationTrackCF_Vtbl, 1 };
534
535 /******************************************************************
536  *              DllMain
537  *
538  *
539  */
540 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
541 {
542         if (fdwReason == DLL_PROCESS_ATTACH)
543         {
544             DisableThreadLibraryCalls(hinstDLL);
545                 /* FIXME: Initialisation */
546         }
547         else if (fdwReason == DLL_PROCESS_DETACH)
548         {
549                 /* FIXME: Cleanup */
550         }
551
552         return TRUE;
553 }
554
555
556 /******************************************************************
557  *              DllCanUnloadNow (DMSTYLE.1)
558  *
559  *
560  */
561 HRESULT WINAPI DMSTYLE_DllCanUnloadNow(void)
562 {
563     FIXME("(void): stub\n");
564
565     return S_FALSE;
566 }
567
568
569 /******************************************************************
570  *              DllGetClassObject (DMSTYLE.2)
571  *
572  *
573  */
574 HRESULT WINAPI DMSTYLE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
575 {
576     TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
577     
578         if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSection) && IsEqualIID (riid, &IID_IClassFactory)) {
579                 *ppv = (LPVOID) &Section_CF;
580                 IClassFactory_AddRef((IClassFactory*)*ppv);
581                 return S_OK;
582         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicStyle) && IsEqualIID (riid, &IID_IClassFactory)) {
583                 *ppv = (LPVOID) &Style_CF;
584                 IClassFactory_AddRef((IClassFactory*)*ppv);
585                 return S_OK;            
586         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicChordTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
587                 *ppv = (LPVOID) &ChordTrack_CF;
588                 IClassFactory_AddRef((IClassFactory*)*ppv);
589                 return S_OK;    
590         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicCommandTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
591                 *ppv = (LPVOID) &CommandTrack_CF;
592                 IClassFactory_AddRef((IClassFactory*)*ppv);
593                 return S_OK;            
594         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicStyleTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
595                 *ppv = (LPVOID) &StyleTrack_CF;
596                 IClassFactory_AddRef((IClassFactory*)*ppv);
597                 return S_OK;            
598         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMotifTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
599                 *ppv = (LPVOID) &MotifTrack_CF;
600                 IClassFactory_AddRef((IClassFactory*)*ppv);
601                 return S_OK;            
602         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicAuditionTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
603                 *ppv = (LPVOID) &AuditionTrack_CF;
604                 IClassFactory_AddRef((IClassFactory*)*ppv);
605                 return S_OK;            
606         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMuteTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
607                 *ppv = (LPVOID) &MuteTrack_CF;
608                 IClassFactory_AddRef((IClassFactory*)*ppv);
609                 return S_OK;            
610         } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMelodyFormulationTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
611                 *ppv = (LPVOID) &MelodyFormulationTrack_CF;
612                 IClassFactory_AddRef((IClassFactory*)*ppv);
613                 return S_OK;            
614         } 
615
616     WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
617     return CLASS_E_CLASSNOTAVAILABLE;
618 }