1 /* DirectMusicInteractiveEngine Main
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 * Copyright (C) 2003-2004 Raphael Junqueira
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21 #include "dmime_private.h"
22
23 WINE_DEFAULT_DEBUG_CHANNEL(dmime);
24
25 LONG DMIME_refCount = 0;
26
27 typedef struct {
28 const IClassFactoryVtbl *lpVtbl;
29 } IClassFactoryImpl;
30
31 /******************************************************************
32 * DirectMusicPerformance ClassFactory
33 */
34 static HRESULT WINAPI PerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
35 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
36
37 if (ppobj == NULL) return E_POINTER;
38
39 return E_NOINTERFACE;
40 }
41
42 static ULONG WINAPI PerformanceCF_AddRef(LPCLASSFACTORY iface) {
43 DMIME_LockModule();
44
45 return 2; /* non-heap based object */
46 }
47
48 static ULONG WINAPI PerformanceCF_Release(LPCLASSFACTORY iface) {
49 DMIME_UnlockModule();
50
51 return 1; /* non-heap based object */
52 }
53
54 static HRESULT WINAPI PerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
55 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
56
57 return DMUSIC_CreateDirectMusicPerformanceImpl (riid, ppobj, pOuter);
58 }
59
60 static HRESULT WINAPI PerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
61 TRACE("(%d)\n", dolock);
62
63 if (dolock)
64 DMIME_LockModule();
65 else
66 DMIME_UnlockModule();
67
68 return S_OK;
69 }
70
71 static const IClassFactoryVtbl PerformanceCF_Vtbl = {
72 PerformanceCF_QueryInterface,
73 PerformanceCF_AddRef,
74 PerformanceCF_Release,
75 PerformanceCF_CreateInstance,
76 PerformanceCF_LockServer
77 };
78
79 static IClassFactoryImpl Performance_CF = {&PerformanceCF_Vtbl};
80
81 /******************************************************************
82 * DirectMusicSegment ClassFactory
83 */
84 static HRESULT WINAPI SegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
85 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
86
87 if (ppobj == NULL) return E_POINTER;
88
89 return E_NOINTERFACE;
90 }
91
92 static ULONG WINAPI SegmentCF_AddRef(LPCLASSFACTORY iface) {
93 DMIME_LockModule();
94
95 return 2; /* non-heap based object */
96 }
97
98 static ULONG WINAPI SegmentCF_Release(LPCLASSFACTORY iface) {
99 DMIME_UnlockModule();
100
101 return 1; /* non-heap based object */
102 }
103
104 static HRESULT WINAPI SegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
105 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
106
107 return DMUSIC_CreateDirectMusicSegmentImpl (riid, ppobj, pOuter);
108 }
109
110 static HRESULT WINAPI SegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
111 TRACE("(%d)\n", dolock);
112
113 if (dolock)
114 DMIME_LockModule();
115 else
116 DMIME_UnlockModule();
117
118 return S_OK;
119 }
120
121 static const IClassFactoryVtbl SegmentCF_Vtbl = {
122 SegmentCF_QueryInterface,
123 SegmentCF_AddRef,
124 SegmentCF_Release,
125 SegmentCF_CreateInstance,
126 SegmentCF_LockServer
127 };
128
129 static IClassFactoryImpl Segment_CF = {&SegmentCF_Vtbl};
130
131 /******************************************************************
132 * DirectMusicSegmentState ClassFactory
133 */
134 static HRESULT WINAPI SegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
135 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
136
137 if (ppobj == NULL) return E_POINTER;
138
139 return E_NOINTERFACE;
140 }
141
142 static ULONG WINAPI SegmentStateCF_AddRef(LPCLASSFACTORY iface) {
143 DMIME_LockModule();
144
145 return 2; /* non-heap based objects */
146 }
147
148 static ULONG WINAPI SegmentStateCF_Release(LPCLASSFACTORY iface) {
149 DMIME_UnlockModule();
150
151 return 1; /* non-heap based object */
152 }
153
154 static HRESULT WINAPI SegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
155 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
156
157 return DMUSIC_CreateDirectMusicSegmentStateImpl (riid, ppobj, pOuter);
158 }
159
160 static HRESULT WINAPI SegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
161 TRACE("(%d)\n", dolock);
162
163 if (dolock)
164 DMIME_LockModule();
165 else
166 DMIME_UnlockModule();
167
168 return S_OK;
169 }
170
171 static const IClassFactoryVtbl SegmentStateCF_Vtbl = {
172 SegmentStateCF_QueryInterface,
173 SegmentStateCF_AddRef,
174 SegmentStateCF_Release,
175 SegmentStateCF_CreateInstance,
176 SegmentStateCF_LockServer
177 };
178
179 static IClassFactoryImpl SegmentState_CF = {&SegmentStateCF_Vtbl};
180
181 /******************************************************************
182 * DirectMusicGraph ClassFactory
183 */
184 static HRESULT WINAPI GraphCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
185 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
186
187 if (ppobj == NULL) return E_POINTER;
188
189 return E_NOINTERFACE;
190 }
191
192 static ULONG WINAPI GraphCF_AddRef(LPCLASSFACTORY iface) {
193 DMIME_LockModule();
194
195 return 2; /* non-heap based object */
196 }
197
198 static ULONG WINAPI GraphCF_Release(LPCLASSFACTORY iface) {
199 DMIME_UnlockModule();
200
201 return 1; /* non-heap based object */
202 }
203
204 static HRESULT WINAPI GraphCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
205 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
206
207 return DMUSIC_CreateDirectMusicGraphImpl (riid, ppobj, pOuter);
208 }
209
210 static HRESULT WINAPI GraphCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
211 TRACE("(%d)\n", dolock);
212
213 if (dolock)
214 DMIME_LockModule();
215 else
216 DMIME_UnlockModule();
217
218 return S_OK;
219 }
220
221 static const IClassFactoryVtbl GraphCF_Vtbl = {
222 GraphCF_QueryInterface,
223 GraphCF_AddRef,
224 GraphCF_Release,
225 GraphCF_CreateInstance,
226 GraphCF_LockServer
227 };
228
229 static IClassFactoryImpl Graph_CF = {&GraphCF_Vtbl};
230
231 /******************************************************************
232 * DirectMusicTempoTrack ClassFactory
233 */
234 static HRESULT WINAPI TempoTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
235 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
236
237 if (ppobj == NULL) return E_POINTER;
238
239 return E_NOINTERFACE;
240 }
241
242 static ULONG WINAPI TempoTrackCF_AddRef(LPCLASSFACTORY iface) {
243 DMIME_LockModule();
244
245 return 2; /* non-heap based object */
246 }
247
248 static ULONG WINAPI TempoTrackCF_Release(LPCLASSFACTORY iface) {
249 DMIME_UnlockModule();
250
251 return 1; /* non-heap based object */
252 }
253
254 static HRESULT WINAPI TempoTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
255 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
256
257 return DMUSIC_CreateDirectMusicTempoTrack (riid, ppobj, pOuter);
258 }
259
260 static HRESULT WINAPI TempoTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
261 TRACE("(%d)\n", dolock);
262
263 if (dolock)
264 DMIME_LockModule();
265 else
266 DMIME_UnlockModule();
267
268 return S_OK;
269 }
270
271 static const IClassFactoryVtbl TempoTrackCF_Vtbl = {
272 TempoTrackCF_QueryInterface,
273 TempoTrackCF_AddRef,
274 TempoTrackCF_Release,
275 TempoTrackCF_CreateInstance,
276 TempoTrackCF_LockServer
277 };
278
279 static IClassFactoryImpl TempoTrack_CF = {&TempoTrackCF_Vtbl};
280
281 /******************************************************************
282 * DirectMusicSeqTrack ClassFactory
283 */
284 static HRESULT WINAPI SeqTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
285 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
286
287 if (ppobj == NULL) return E_POINTER;
288
289 return E_NOINTERFACE;
290 }
291
292 static ULONG WINAPI SeqTrackCF_AddRef(LPCLASSFACTORY iface) {
293 DMIME_LockModule();
294
295 return 2; /* non-heap based object */
296 }
297
298 static ULONG WINAPI SeqTrackCF_Release(LPCLASSFACTORY iface) {
299 DMIME_UnlockModule();
300
301 return 1; /* non-heap based object */
302 }
303
304 static HRESULT WINAPI SeqTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
305 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
306
307 return DMUSIC_CreateDirectMusicSeqTrack (riid, ppobj, pOuter);
308 }
309
310 static HRESULT WINAPI SeqTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
311 TRACE("(%d)\n", dolock);
312
313 if (dolock)
314 DMIME_LockModule();
315 else
316 DMIME_UnlockModule();
317
318 return S_OK;
319 }
320
321 static const IClassFactoryVtbl SeqTrackCF_Vtbl = {
322 SeqTrackCF_QueryInterface,
323 SeqTrackCF_AddRef,
324 SeqTrackCF_Release,
325 SeqTrackCF_CreateInstance,
326 SeqTrackCF_LockServer
327 };
328
329 static IClassFactoryImpl SeqTrack_CF = {&SeqTrackCF_Vtbl};
330
331 /******************************************************************
332 * DirectMusicSysExTrack ClassFactory
333 */
334 static HRESULT WINAPI SysExTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
335 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
336
337 if (ppobj == NULL) return E_POINTER;
338
339 return E_NOINTERFACE;
340 }
341
342 static ULONG WINAPI SysExTrackCF_AddRef(LPCLASSFACTORY iface) {
343 DMIME_LockModule();
344
345 return 2; /* non-heap based object */
346 }
347
348 static ULONG WINAPI SysExTrackCF_Release(LPCLASSFACTORY iface) {
349 DMIME_UnlockModule();
350
351 return 1; /* non-heap based object */
352 }
353
354 static HRESULT WINAPI SysExTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
355 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
356 return DMUSIC_CreateDirectMusicSysExTrack (riid, ppobj, pOuter);
357 }
358
359 static HRESULT WINAPI SysExTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
360 TRACE("(%d)\n", dolock);
361
362 if (dolock)
363 DMIME_LockModule();
364 else
365 DMIME_UnlockModule();
366
367 return S_OK;
368 }
369
370 static const IClassFactoryVtbl SysExTrackCF_Vtbl = {
371 SysExTrackCF_QueryInterface,
372 SysExTrackCF_AddRef,
373 SysExTrackCF_Release,
374 SysExTrackCF_CreateInstance,
375 SysExTrackCF_LockServer
376 };
377
378 static IClassFactoryImpl SysExTrack_CF = {&SysExTrackCF_Vtbl};
379
380 /******************************************************************
381 * DirectMusicTimeSigTrack ClassFactory
382 */
383 static HRESULT WINAPI TimeSigTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
384 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
385
386 if (ppobj == NULL) return E_POINTER;
387
388 return E_NOINTERFACE;
389 }
390
391 static ULONG WINAPI TimeSigTrackCF_AddRef(LPCLASSFACTORY iface) {
392 DMIME_LockModule();
393
394 return 2; /* non-heap based object */
395 }
396
397 static ULONG WINAPI TimeSigTrackCF_Release(LPCLASSFACTORY iface) {
398 DMIME_UnlockModule();
399
400 return 1; /* non-heap based object */
401 }
402
403 static HRESULT WINAPI TimeSigTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
404 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
405
406 return DMUSIC_CreateDirectMusicTimeSigTrack (riid, ppobj, pOuter);
407 }
408
409 static HRESULT WINAPI TimeSigTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
410 TRACE("(%d)\n", dolock);
411
412 if (dolock)
413 DMIME_LockModule();
414 else
415 DMIME_UnlockModule();
416
417 return S_OK;
418 }
419
420 static const IClassFactoryVtbl TimeSigTrackCF_Vtbl = {
421 TimeSigTrackCF_QueryInterface,
422 TimeSigTrackCF_AddRef,
423 TimeSigTrackCF_Release,
424 TimeSigTrackCF_CreateInstance,
425 TimeSigTrackCF_LockServer
426 };
427
428 static IClassFactoryImpl TimeSigTrack_CF = {&TimeSigTrackCF_Vtbl};
429
430 /******************************************************************
431 * DirectMusicParamControlTrack ClassFactory
432 */
433 static HRESULT WINAPI ParamControlTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
434 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
435
436 if (ppobj == NULL) return E_POINTER;
437
438 return E_NOINTERFACE;
439 }
440
441 static ULONG WINAPI ParamControlTrackCF_AddRef(LPCLASSFACTORY iface) {
442 DMIME_LockModule();
443
444 return 2; /* non-heap based object */
445 }
446
447 static ULONG WINAPI ParamControlTrackCF_Release(LPCLASSFACTORY iface) {
448 DMIME_UnlockModule();
449
450 return 1; /* non-heap based object */
451 }
452
453 static HRESULT WINAPI ParamControlTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
454 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
455
456 return DMUSIC_CreateDirectMusicParamControlTrack (riid, ppobj, pOuter);
457 }
458
459 static HRESULT WINAPI ParamControlTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
460 TRACE("(%d)\n", dolock);
461
462 if (dolock)
463 DMIME_LockModule();
464 else
465 DMIME_UnlockModule();
466
467 return S_OK;
468 }
469
470 static const IClassFactoryVtbl ParamControlTrackCF_Vtbl = {
471 ParamControlTrackCF_QueryInterface,
472 ParamControlTrackCF_AddRef,
473 ParamControlTrackCF_Release,
474 ParamControlTrackCF_CreateInstance,
475 ParamControlTrackCF_LockServer
476 };
477
478 static IClassFactoryImpl ParamControlTrack_CF = {&ParamControlTrackCF_Vtbl};
479
480 /******************************************************************
481 * DirectMusicMarkerTrack ClassFactory
482 */
483 static HRESULT WINAPI MarkerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
484 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
485
486 if (ppobj == NULL) return E_POINTER;
487
488 return E_NOINTERFACE;
489 }
490
491 static ULONG WINAPI MarkerTrackCF_AddRef(LPCLASSFACTORY iface) {
492 DMIME_LockModule();
493
494 return 2; /* non-heap based object */
495 }
496
497 static ULONG WINAPI MarkerTrackCF_Release(LPCLASSFACTORY iface) {
498 DMIME_UnlockModule();
499
500 return 1; /* non-heap based object */
501 }
502
503 static HRESULT WINAPI MarkerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
504 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
505
506 return DMUSIC_CreateDirectMusicMarkerTrack (riid, ppobj, pOuter);
507 }
508
509 static HRESULT WINAPI MarkerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
510 TRACE("(%d)\n", dolock);
511
512 if (dolock)
513 DMIME_LockModule();
514 else
515 DMIME_UnlockModule();
516
517 return S_OK;
518 }
519
520 static const IClassFactoryVtbl MarkerTrackCF_Vtbl = {
521 MarkerTrackCF_QueryInterface,
522 MarkerTrackCF_AddRef,
523 MarkerTrackCF_Release,
524 MarkerTrackCF_CreateInstance,
525 MarkerTrackCF_LockServer
526 };
527
528 static IClassFactoryImpl MarkerTrack_CF = {&MarkerTrackCF_Vtbl};
529
530 /******************************************************************
531 * DirectMusicLyricsTrack ClassFactory
532 */
533 static HRESULT WINAPI LyricsTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
534 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
535
536 if (ppobj == NULL) return E_POINTER;
537
538 return E_NOINTERFACE;
539 }
540
541 static ULONG WINAPI LyricsTrackCF_AddRef(LPCLASSFACTORY iface) {
542 DMIME_LockModule();
543
544 return 2; /* non-heap based object */
545 }
546
547 static ULONG WINAPI LyricsTrackCF_Release(LPCLASSFACTORY iface) {
548 DMIME_UnlockModule();
549
550 return 1; /* non-heap based object */
551 }
552
553 static HRESULT WINAPI LyricsTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
554 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
555
556 return DMUSIC_CreateDirectMusicLyricsTrack (riid, ppobj, pOuter);
557 }
558
559 static HRESULT WINAPI LyricsTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
560 TRACE("(%d)\n", dolock);
561
562 if (dolock)
563 DMIME_LockModule();
564 else
565 DMIME_UnlockModule();
566
567 return S_OK;
568 }
569
570 static const IClassFactoryVtbl LyricsTrackCF_Vtbl = {
571 LyricsTrackCF_QueryInterface,
572 LyricsTrackCF_AddRef,
573 LyricsTrackCF_Release,
574 LyricsTrackCF_CreateInstance,
575 LyricsTrackCF_LockServer
576 };
577
578 static IClassFactoryImpl LyricsTrack_CF = {&LyricsTrackCF_Vtbl};
579
580
581 /******************************************************************
582 * DirectMusicSegTriggerTrack ClassFactory
583 */
584 static HRESULT WINAPI SegTriggerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
585 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
586
587 if (ppobj == NULL) return E_POINTER;
588
589 return E_NOINTERFACE;
590 }
591
592 static ULONG WINAPI SegTriggerTrackCF_AddRef(LPCLASSFACTORY iface) {
593 DMIME_LockModule();
594
595 return 2; /* non-heap based object */
596 }
597
598 static ULONG WINAPI SegTriggerTrackCF_Release(LPCLASSFACTORY iface) {
599 DMIME_UnlockModule();
600
601 return 1; /* non-heap based object */
602 }
603
604 static HRESULT WINAPI SegTriggerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
605 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
606
607 return DMUSIC_CreateDirectMusicSegTriggerTrack (riid, ppobj, pOuter);
608 }
609
610 static HRESULT WINAPI SegTriggerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
611 TRACE("(%d)\n", dolock);
612
613 if (dolock)
614 DMIME_LockModule();
615 else
616 DMIME_UnlockModule();
617
618 return S_OK;
619 }
620
621 static const IClassFactoryVtbl SegTriggerTrackCF_Vtbl = {
622 SegTriggerTrackCF_QueryInterface,
623 SegTriggerTrackCF_AddRef,
624 SegTriggerTrackCF_Release,
625 SegTriggerTrackCF_CreateInstance,
626 SegTriggerTrackCF_LockServer
627 };
628
629 static IClassFactoryImpl SegTriggerTrack_CF = {&SegTriggerTrackCF_Vtbl};
630
631 /******************************************************************
632 * DirectMusicAudioPath ClassFactory
633 */
634 static HRESULT WINAPI AudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
635 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
636
637 if (ppobj == NULL) return E_POINTER;
638
639 return E_NOINTERFACE;
640 }
641
642 static ULONG WINAPI AudioPathCF_AddRef(LPCLASSFACTORY iface) {
643 DMIME_LockModule();
644
645 return 2; /* non-heap based object */
646 }
647
648 static ULONG WINAPI AudioPathCF_Release(LPCLASSFACTORY iface) {
649 DMIME_UnlockModule();
650
651 return 1; /* non-heap based object */
652 }
653
654 static HRESULT WINAPI AudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
655 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
656
657 return DMUSIC_CreateDirectMusicAudioPathImpl (riid, ppobj, pOuter);
658 }
659
660 static HRESULT WINAPI AudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
661 TRACE("(%d)\n", dolock);
662
663 if (dolock)
664 DMIME_LockModule();
665 else
666 DMIME_UnlockModule();
667
668 return S_OK;
669 }
670
671 static const IClassFactoryVtbl AudioPathCF_Vtbl = {
672 AudioPathCF_QueryInterface,
673 AudioPathCF_AddRef,
674 AudioPathCF_Release,
675 AudioPathCF_CreateInstance,
676 AudioPathCF_LockServer
677 };
678
679 static IClassFactoryImpl AudioPath_CF = {&AudioPathCF_Vtbl};
680
681 /******************************************************************
682 * DirectMusicWaveTrack ClassFactory
683 */
684 static HRESULT WINAPI WaveTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
685 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
686
687 if (ppobj == NULL) return E_POINTER;
688
689 return E_NOINTERFACE;
690 }
691
692 static ULONG WINAPI WaveTrackCF_AddRef(LPCLASSFACTORY iface) {
693 DMIME_LockModule();
694
695 return 2; /* non-heap based object */
696 }
697
698 static ULONG WINAPI WaveTrackCF_Release(LPCLASSFACTORY iface) {
699 DMIME_UnlockModule();
700
701 return 1; /* non-heap based object */
702 }
703
704 static HRESULT WINAPI WaveTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
705 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
706
707 return DMUSIC_CreateDirectMusicWaveTrack (riid, ppobj, pOuter);
708 }
709
710 static HRESULT WINAPI WaveTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
711 TRACE("(%d)\n", dolock);
712
713 if (dolock)
714 DMIME_LockModule();
715 else
716 DMIME_UnlockModule();
717
718 return S_OK;
719 }
720
721 static const IClassFactoryVtbl WaveTrackCF_Vtbl = {
722 WaveTrackCF_QueryInterface,
723 WaveTrackCF_AddRef,
724 WaveTrackCF_Release,
725 WaveTrackCF_CreateInstance,
726 WaveTrackCF_LockServer
727 };
728
729 static IClassFactoryImpl WaveTrack_CF = {&WaveTrackCF_Vtbl};
730
731 /******************************************************************
732 * DllMain
733 *
734 *
735 */
736 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
737 if (fdwReason == DLL_PROCESS_ATTACH) {
738 DisableThreadLibraryCalls(hinstDLL);
739 /* FIXME: Initialisation */
740 }
741 else if (fdwReason == DLL_PROCESS_DETACH) {
742 /* FIXME: Cleanup */
743 }
744
745 return TRUE;
746 }
747
748
749 /******************************************************************
750 * DllCanUnloadNow (DMIME.1)
751 *
752 *
753 */
754 HRESULT WINAPI DllCanUnloadNow(void)
755 {
756 return DMIME_refCount != 0 ? S_FALSE : S_OK;
757 }
758
759
760 /******************************************************************
761 * DllGetClassObject (DMIME.@)
762 *
763 *
764 */
765 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
766 {
767 TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
768 if (IsEqualCLSID (rclsid, &CLSID_DirectMusicPerformance) && IsEqualIID (riid, &IID_IClassFactory)) {
769 *ppv = &Performance_CF;
770 IClassFactory_AddRef((IClassFactory*)*ppv);
771 return S_OK;
772 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegment) && IsEqualIID (riid, &IID_IClassFactory)) {
773 *ppv = &Segment_CF;
774 IClassFactory_AddRef((IClassFactory*)*ppv);
775 return S_OK;
776 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegmentState) && IsEqualIID (riid, &IID_IClassFactory)) {
777 *ppv = &SegmentState_CF;
778 IClassFactory_AddRef((IClassFactory*)*ppv);
779 return S_OK;
780 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicGraph) && IsEqualIID (riid, &IID_IClassFactory)) {
781 *ppv = &Graph_CF;
782 IClassFactory_AddRef((IClassFactory*)*ppv);
783 return S_OK;
784 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTempoTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
785 *ppv = &TempoTrack_CF;
786 IClassFactory_AddRef((IClassFactory*)*ppv);
787 return S_OK;
788 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSeqTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
789 *ppv = &SeqTrack_CF;
790 IClassFactory_AddRef((IClassFactory*)*ppv);
791 return S_OK;
792 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSysExTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
793 *ppv = &SysExTrack_CF;
794 IClassFactory_AddRef((IClassFactory*)*ppv);
795 return S_OK;
796 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTimeSigTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
797 *ppv = &TimeSigTrack_CF;
798 IClassFactory_AddRef((IClassFactory*)*ppv);
799 return S_OK;
800 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicParamControlTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
801 *ppv = &ParamControlTrack_CF;
802 IClassFactory_AddRef((IClassFactory*)*ppv);
803 return S_OK;
804 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMarkerTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
805 *ppv = &MarkerTrack_CF;
806 IClassFactory_AddRef((IClassFactory*)*ppv);
807 return S_OK;
808 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicLyricsTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
809 *ppv = &LyricsTrack_CF;
810 IClassFactory_AddRef((IClassFactory*)*ppv);
811 return S_OK;
812 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegTriggerTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
813 *ppv = &SegTriggerTrack_CF;
814 IClassFactory_AddRef((IClassFactory*)*ppv);
815 return S_OK;
816 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicAudioPath) && IsEqualIID (riid, &IID_IClassFactory)) {
817 *ppv = &AudioPath_CF;
818 IClassFactory_AddRef((IClassFactory*)*ppv);
819 return S_OK;
820 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicWaveTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
821 *ppv = &WaveTrack_CF;
822 IClassFactory_AddRef((IClassFactory*)*ppv);
823 return S_OK;
824 }
825
826 WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
827 return CLASS_E_CLASSNOTAVAILABLE;
828 }
829
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.