1 /* DirectMusicStyle Main
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (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 GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20 #include "dmstyle_private.h"
21
22 WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
23
24 LONG DMSTYLE_refCount = 0;
25
26 typedef struct {
27 const IClassFactoryVtbl *lpVtbl;
28 } IClassFactoryImpl;
29
30 /******************************************************************
31 * DirectMusicSection ClassFactory
32 */
33 static HRESULT WINAPI SectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
34 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
35
36 if (ppobj == NULL) return E_POINTER;
37
38 return E_NOINTERFACE;
39 }
40
41 static ULONG WINAPI SectionCF_AddRef(LPCLASSFACTORY iface) {
42 DMSTYLE_LockModule();
43
44 return 2; /* non-heap based object */
45 }
46
47 static ULONG WINAPI SectionCF_Release(LPCLASSFACTORY iface) {
48 DMSTYLE_UnlockModule();
49
50 return 1; /* non-heap based object */
51 }
52
53 static HRESULT WINAPI SectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
54 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
55
56 /* nothing here yet */
57 WARN("(%s, %p): not found\n", debugstr_dmguid(riid), ppobj);
58
59 return E_NOINTERFACE;
60 }
61
62 static HRESULT WINAPI SectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
63 TRACE("(%d)\n", dolock);
64
65 if (dolock)
66 DMSTYLE_LockModule();
67 else
68 DMSTYLE_UnlockModule();
69
70 return S_OK;
71 }
72
73 static const IClassFactoryVtbl SectionCF_Vtbl = {
74 SectionCF_QueryInterface,
75 SectionCF_AddRef,
76 SectionCF_Release,
77 SectionCF_CreateInstance,
78 SectionCF_LockServer
79 };
80
81 static IClassFactoryImpl Section_CF = {&SectionCF_Vtbl};
82
83 /******************************************************************
84 * DirectMusicStyle ClassFactory
85 */
86 static HRESULT WINAPI StyleCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
87 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
88
89 if (ppobj == NULL) return E_POINTER;
90
91 return E_NOINTERFACE;
92 }
93
94 static ULONG WINAPI StyleCF_AddRef(LPCLASSFACTORY iface) {
95 DMSTYLE_LockModule();
96
97 return 2; /* non-heap based object */
98 }
99
100 static ULONG WINAPI StyleCF_Release(LPCLASSFACTORY iface) {
101 DMSTYLE_UnlockModule();
102
103 return 1; /* non-heap based object */
104 }
105
106 static HRESULT WINAPI StyleCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
107 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
108
109 return DMUSIC_CreateDirectMusicStyleImpl (riid, ppobj, pOuter);
110 }
111
112 static HRESULT WINAPI StyleCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
113 TRACE("(%d)\n", dolock);
114
115 if (dolock)
116 DMSTYLE_LockModule();
117 else
118 DMSTYLE_UnlockModule();
119
120 return S_OK;
121 }
122
123 static const IClassFactoryVtbl StyleCF_Vtbl = {
124 StyleCF_QueryInterface,
125 StyleCF_AddRef,
126 StyleCF_Release,
127 StyleCF_CreateInstance,
128 StyleCF_LockServer
129 };
130
131 static IClassFactoryImpl Style_CF = {&StyleCF_Vtbl};
132
133 /******************************************************************
134 * DirectMusicChordTrack ClassFactory
135 */
136 static HRESULT WINAPI ChordTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
137 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
138
139 if (ppobj == NULL) return E_POINTER;
140
141 return E_NOINTERFACE;
142 }
143
144 static ULONG WINAPI ChordTrackCF_AddRef(LPCLASSFACTORY iface) {
145 DMSTYLE_LockModule();
146
147 return 2; /* non-heap based object */
148 }
149
150 static ULONG WINAPI ChordTrackCF_Release(LPCLASSFACTORY iface) {
151 DMSTYLE_UnlockModule();
152
153 return 1; /* non-heap based object */
154 }
155
156 static HRESULT WINAPI ChordTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
157 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
158
159 return DMUSIC_CreateDirectMusicChordTrack (riid, ppobj, pOuter);
160 }
161
162 static HRESULT WINAPI ChordTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
163 TRACE("(%d)\n", dolock);
164
165 if (dolock)
166 DMSTYLE_LockModule();
167 else
168 DMSTYLE_UnlockModule();
169
170 return S_OK;
171 }
172
173 static const IClassFactoryVtbl ChordTrackCF_Vtbl = {
174 ChordTrackCF_QueryInterface,
175 ChordTrackCF_AddRef,
176 ChordTrackCF_Release,
177 ChordTrackCF_CreateInstance,
178 ChordTrackCF_LockServer
179 };
180
181 static IClassFactoryImpl ChordTrack_CF = {&ChordTrackCF_Vtbl};
182
183 /******************************************************************
184 * DirectMusicCommandTrack ClassFactory
185 */
186 static HRESULT WINAPI CommandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
187 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
188
189 if (ppobj == NULL) return E_POINTER;
190
191 return E_NOINTERFACE;
192 }
193
194 static ULONG WINAPI CommandTrackCF_AddRef(LPCLASSFACTORY iface) {
195 DMSTYLE_LockModule();
196
197 return 2; /* non-heap based object */
198 }
199
200 static ULONG WINAPI CommandTrackCF_Release(LPCLASSFACTORY iface) {
201 DMSTYLE_UnlockModule();
202
203 return 1; /* non-heap based object */
204 }
205
206 static HRESULT WINAPI CommandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
207 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
208
209 return DMUSIC_CreateDirectMusicCommandTrack (riid, ppobj, pOuter);
210 }
211
212 static HRESULT WINAPI CommandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
213 TRACE("(%d)\n", dolock);
214
215 if (dolock)
216 DMSTYLE_LockModule();
217 else
218 DMSTYLE_UnlockModule();
219
220 return S_OK;
221 }
222
223 static const IClassFactoryVtbl CommandTrackCF_Vtbl = {
224 CommandTrackCF_QueryInterface,
225 CommandTrackCF_AddRef,
226 CommandTrackCF_Release,
227 CommandTrackCF_CreateInstance,
228 CommandTrackCF_LockServer
229 };
230
231 static IClassFactoryImpl CommandTrack_CF = {&CommandTrackCF_Vtbl};
232
233 /******************************************************************
234 * DirectMusicStyleTrack ClassFactory
235 */
236 static HRESULT WINAPI StyleTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
237 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
238
239 if (ppobj == NULL) return E_POINTER;
240
241 return E_NOINTERFACE;
242 }
243
244 static ULONG WINAPI StyleTrackCF_AddRef(LPCLASSFACTORY iface) {
245 DMSTYLE_LockModule();
246
247 return 2; /* non-heap based object */
248 }
249
250 static ULONG WINAPI StyleTrackCF_Release(LPCLASSFACTORY iface) {
251 DMSTYLE_UnlockModule();
252
253 return 1; /* non-heap based object */
254 }
255
256 static HRESULT WINAPI StyleTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
257 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
258
259 return DMUSIC_CreateDirectMusicStyleTrack (riid, ppobj, pOuter);
260 }
261
262 static HRESULT WINAPI StyleTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
263 TRACE("(%d)\n", dolock);
264
265 if (dolock)
266 DMSTYLE_LockModule();
267 else
268 DMSTYLE_UnlockModule();
269
270 return S_OK;
271 }
272
273 static const IClassFactoryVtbl StyleTrackCF_Vtbl = {
274 StyleTrackCF_QueryInterface,
275 StyleTrackCF_AddRef,
276 StyleTrackCF_Release,
277 StyleTrackCF_CreateInstance,
278 StyleTrackCF_LockServer
279 };
280
281 static IClassFactoryImpl StyleTrack_CF = {&StyleTrackCF_Vtbl};
282
283 /******************************************************************
284 * DirectMusicMotifTrack ClassFactory
285 */
286 static HRESULT WINAPI MotifTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
287 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
288
289 if (ppobj == NULL) return E_POINTER;
290
291 return E_NOINTERFACE;
292 }
293
294 static ULONG WINAPI MotifTrackCF_AddRef(LPCLASSFACTORY iface) {
295 DMSTYLE_LockModule();
296
297 return 2; /* non-heap based object */
298 }
299
300 static ULONG WINAPI MotifTrackCF_Release(LPCLASSFACTORY iface) {
301 DMSTYLE_UnlockModule();
302
303 return 1; /* non-heap based object */
304 }
305
306 static HRESULT WINAPI MotifTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
307 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
308
309 return DMUSIC_CreateDirectMusicMotifTrack (riid, ppobj, pOuter);
310 }
311
312 static HRESULT WINAPI MotifTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
313 TRACE("(%d)\n", dolock);
314
315 if (dolock)
316 DMSTYLE_LockModule();
317 else
318 DMSTYLE_UnlockModule();
319
320 return S_OK;
321 }
322
323 static const IClassFactoryVtbl MotifTrackCF_Vtbl = {
324 MotifTrackCF_QueryInterface,
325 MotifTrackCF_AddRef,
326 MotifTrackCF_Release,
327 MotifTrackCF_CreateInstance,
328 MotifTrackCF_LockServer
329 };
330
331 static IClassFactoryImpl MotifTrack_CF = {&MotifTrackCF_Vtbl};
332
333 /******************************************************************
334 * DirectMusicAuditionTrack ClassFactory
335 */
336 static HRESULT WINAPI AuditionTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
337 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
338
339 if (ppobj == NULL) return E_POINTER;
340
341 return E_NOINTERFACE;
342 }
343
344 static ULONG WINAPI AuditionTrackCF_AddRef(LPCLASSFACTORY iface) {
345 DMSTYLE_LockModule();
346
347 return 2; /* non-heap based object */
348 }
349
350 static ULONG WINAPI AuditionTrackCF_Release(LPCLASSFACTORY iface) {
351 DMSTYLE_UnlockModule();
352
353 return 1; /* non-heap based object */
354 }
355
356 static HRESULT WINAPI AuditionTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
357 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
358
359 return DMUSIC_CreateDirectMusicAuditionTrack (riid, ppobj, pOuter);
360 }
361
362 static HRESULT WINAPI AuditionTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
363 TRACE("(%d)\n", dolock);
364
365 if (dolock)
366 DMSTYLE_LockModule();
367 else
368 DMSTYLE_UnlockModule();
369
370 return S_OK;
371 }
372
373 static const IClassFactoryVtbl AuditionTrackCF_Vtbl = {
374 AuditionTrackCF_QueryInterface,
375 AuditionTrackCF_AddRef,
376 AuditionTrackCF_Release,
377 AuditionTrackCF_CreateInstance,
378 AuditionTrackCF_LockServer
379 };
380
381 static IClassFactoryImpl AuditionTrack_CF = {&AuditionTrackCF_Vtbl};
382
383 /******************************************************************
384 * DirectMusicMuteTrack ClassFactory
385 */
386 static HRESULT WINAPI MuteTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
387 FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
388
389 if (ppobj == NULL) return E_POINTER;
390
391 return E_NOINTERFACE;
392 }
393
394 static ULONG WINAPI MuteTrackCF_AddRef(LPCLASSFACTORY iface) {
395 DMSTYLE_LockModule();
396
397 return 2; /* non-heap based object */
398 }
399
400 static ULONG WINAPI MuteTrackCF_Release(LPCLASSFACTORY iface) {
401 DMSTYLE_UnlockModule();
402
403 return 1; /* non-heap based object */
404 }
405
406 static HRESULT WINAPI MuteTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
407 TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
408
409 return DMUSIC_CreateDirectMusicMuteTrack (riid, ppobj, pOuter);
410 }
411
412 static HRESULT WINAPI MuteTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
413 TRACE("(%d)\n", dolock);
414
415 if (dolock)
416 DMSTYLE_LockModule();
417 else
418 DMSTYLE_UnlockModule();
419
420 return S_OK;
421 }
422
423 static const IClassFactoryVtbl MuteTrackCF_Vtbl = {
424 MuteTrackCF_QueryInterface,
425 MuteTrackCF_AddRef,
426 MuteTrackCF_Release,
427 MuteTrackCF_CreateInstance,
428 MuteTrackCF_LockServer
429 };
430
431 static IClassFactoryImpl MuteTrack_CF = {&MuteTrackCF_Vtbl};
432
433 /******************************************************************
434 * DllMain
435 *
436 *
437 */
438 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
439 if (fdwReason == DLL_PROCESS_ATTACH) {
440 DisableThreadLibraryCalls(hinstDLL);
441 /* FIXME: Initialisation */
442 } else if (fdwReason == DLL_PROCESS_DETACH) {
443 /* FIXME: Cleanup */
444 }
445
446 return TRUE;
447 }
448
449
450 /******************************************************************
451 * DllCanUnloadNow (DMSTYLE.1)
452 *
453 *
454 */
455 HRESULT WINAPI DllCanUnloadNow(void) {
456 return DMSTYLE_refCount != 0 ? S_FALSE : S_OK;
457 }
458
459
460 /******************************************************************
461 * DllGetClassObject (DMSTYLE.@)
462 *
463 *
464 */
465 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
466 TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
467
468 if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSection) && IsEqualIID (riid, &IID_IClassFactory)) {
469 *ppv = &Section_CF;
470 IClassFactory_AddRef((IClassFactory*)*ppv);
471 return S_OK;
472 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicStyle) && IsEqualIID (riid, &IID_IClassFactory)) {
473 *ppv = &Style_CF;
474 IClassFactory_AddRef((IClassFactory*)*ppv);
475 return S_OK;
476 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicChordTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
477 *ppv = &ChordTrack_CF;
478 IClassFactory_AddRef((IClassFactory*)*ppv);
479 return S_OK;
480 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicCommandTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
481 *ppv = &CommandTrack_CF;
482 IClassFactory_AddRef((IClassFactory*)*ppv);
483 return S_OK;
484 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicStyleTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
485 *ppv = &StyleTrack_CF;
486 IClassFactory_AddRef((IClassFactory*)*ppv);
487 return S_OK;
488 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMotifTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
489 *ppv = &MotifTrack_CF;
490 IClassFactory_AddRef((IClassFactory*)*ppv);
491 return S_OK;
492 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicAuditionTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
493 *ppv = &AuditionTrack_CF;
494 IClassFactory_AddRef((IClassFactory*)*ppv);
495 return S_OK;
496 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMuteTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
497 *ppv = &MuteTrack_CF;
498 IClassFactory_AddRef((IClassFactory*)*ppv);
499 return S_OK;
500 }
501
502 WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
503 return CLASS_E_CLASSNOTAVAILABLE;
504 }
505
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.