1 /* DirectMusicStyle Main
3 * Copyright (C) 2003-2004 Rok Mandeljc
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.
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.
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
20 #include "dmstyle_private.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(dmstyle
);
25 static HINSTANCE instance
;
26 LONG DMSTYLE_refCount
= 0;
29 const IClassFactoryVtbl
*lpVtbl
;
32 /******************************************************************
33 * DirectMusicSection ClassFactory
35 static HRESULT WINAPI
SectionCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
36 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
38 if (ppobj
== NULL
) return E_POINTER
;
43 static ULONG WINAPI
SectionCF_AddRef(LPCLASSFACTORY iface
) {
46 return 2; /* non-heap based object */
49 static ULONG WINAPI
SectionCF_Release(LPCLASSFACTORY iface
) {
50 DMSTYLE_UnlockModule();
52 return 1; /* non-heap based object */
55 static HRESULT WINAPI
SectionCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
56 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
58 /* nothing here yet */
59 WARN("(%s, %p): not found\n", debugstr_dmguid(riid
), ppobj
);
64 static HRESULT WINAPI
SectionCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
65 TRACE("(%d)\n", dolock
);
70 DMSTYLE_UnlockModule();
75 static const IClassFactoryVtbl SectionCF_Vtbl
= {
76 SectionCF_QueryInterface
,
79 SectionCF_CreateInstance
,
83 static IClassFactoryImpl Section_CF
= {&SectionCF_Vtbl
};
85 /******************************************************************
86 * DirectMusicStyle ClassFactory
88 static HRESULT WINAPI
StyleCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
89 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
91 if (ppobj
== NULL
) return E_POINTER
;
96 static ULONG WINAPI
StyleCF_AddRef(LPCLASSFACTORY iface
) {
99 return 2; /* non-heap based object */
102 static ULONG WINAPI
StyleCF_Release(LPCLASSFACTORY iface
) {
103 DMSTYLE_UnlockModule();
105 return 1; /* non-heap based object */
108 static HRESULT WINAPI
StyleCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
109 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
111 return DMUSIC_CreateDirectMusicStyleImpl (riid
, ppobj
, pOuter
);
114 static HRESULT WINAPI
StyleCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
115 TRACE("(%d)\n", dolock
);
118 DMSTYLE_LockModule();
120 DMSTYLE_UnlockModule();
125 static const IClassFactoryVtbl StyleCF_Vtbl
= {
126 StyleCF_QueryInterface
,
129 StyleCF_CreateInstance
,
133 static IClassFactoryImpl Style_CF
= {&StyleCF_Vtbl
};
135 /******************************************************************
136 * DirectMusicChordTrack ClassFactory
138 static HRESULT WINAPI
ChordTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
139 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
141 if (ppobj
== NULL
) return E_POINTER
;
143 return E_NOINTERFACE
;
146 static ULONG WINAPI
ChordTrackCF_AddRef(LPCLASSFACTORY iface
) {
147 DMSTYLE_LockModule();
149 return 2; /* non-heap based object */
152 static ULONG WINAPI
ChordTrackCF_Release(LPCLASSFACTORY iface
) {
153 DMSTYLE_UnlockModule();
155 return 1; /* non-heap based object */
158 static HRESULT WINAPI
ChordTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
159 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
161 return DMUSIC_CreateDirectMusicChordTrack (riid
, ppobj
, pOuter
);
164 static HRESULT WINAPI
ChordTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
165 TRACE("(%d)\n", dolock
);
168 DMSTYLE_LockModule();
170 DMSTYLE_UnlockModule();
175 static const IClassFactoryVtbl ChordTrackCF_Vtbl
= {
176 ChordTrackCF_QueryInterface
,
178 ChordTrackCF_Release
,
179 ChordTrackCF_CreateInstance
,
180 ChordTrackCF_LockServer
183 static IClassFactoryImpl ChordTrack_CF
= {&ChordTrackCF_Vtbl
};
185 /******************************************************************
186 * DirectMusicCommandTrack ClassFactory
188 static HRESULT WINAPI
CommandTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
189 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
191 if (ppobj
== NULL
) return E_POINTER
;
193 return E_NOINTERFACE
;
196 static ULONG WINAPI
CommandTrackCF_AddRef(LPCLASSFACTORY iface
) {
197 DMSTYLE_LockModule();
199 return 2; /* non-heap based object */
202 static ULONG WINAPI
CommandTrackCF_Release(LPCLASSFACTORY iface
) {
203 DMSTYLE_UnlockModule();
205 return 1; /* non-heap based object */
208 static HRESULT WINAPI
CommandTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
209 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
211 return DMUSIC_CreateDirectMusicCommandTrack (riid
, ppobj
, pOuter
);
214 static HRESULT WINAPI
CommandTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
215 TRACE("(%d)\n", dolock
);
218 DMSTYLE_LockModule();
220 DMSTYLE_UnlockModule();
225 static const IClassFactoryVtbl CommandTrackCF_Vtbl
= {
226 CommandTrackCF_QueryInterface
,
227 CommandTrackCF_AddRef
,
228 CommandTrackCF_Release
,
229 CommandTrackCF_CreateInstance
,
230 CommandTrackCF_LockServer
233 static IClassFactoryImpl CommandTrack_CF
= {&CommandTrackCF_Vtbl
};
235 /******************************************************************
236 * DirectMusicStyleTrack ClassFactory
238 static HRESULT WINAPI
StyleTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
239 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
241 if (ppobj
== NULL
) return E_POINTER
;
243 return E_NOINTERFACE
;
246 static ULONG WINAPI
StyleTrackCF_AddRef(LPCLASSFACTORY iface
) {
247 DMSTYLE_LockModule();
249 return 2; /* non-heap based object */
252 static ULONG WINAPI
StyleTrackCF_Release(LPCLASSFACTORY iface
) {
253 DMSTYLE_UnlockModule();
255 return 1; /* non-heap based object */
258 static HRESULT WINAPI
StyleTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
259 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
261 return DMUSIC_CreateDirectMusicStyleTrack (riid
, ppobj
, pOuter
);
264 static HRESULT WINAPI
StyleTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
265 TRACE("(%d)\n", dolock
);
268 DMSTYLE_LockModule();
270 DMSTYLE_UnlockModule();
275 static const IClassFactoryVtbl StyleTrackCF_Vtbl
= {
276 StyleTrackCF_QueryInterface
,
278 StyleTrackCF_Release
,
279 StyleTrackCF_CreateInstance
,
280 StyleTrackCF_LockServer
283 static IClassFactoryImpl StyleTrack_CF
= {&StyleTrackCF_Vtbl
};
285 /******************************************************************
286 * DirectMusicMotifTrack ClassFactory
288 static HRESULT WINAPI
MotifTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
289 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
291 if (ppobj
== NULL
) return E_POINTER
;
293 return E_NOINTERFACE
;
296 static ULONG WINAPI
MotifTrackCF_AddRef(LPCLASSFACTORY iface
) {
297 DMSTYLE_LockModule();
299 return 2; /* non-heap based object */
302 static ULONG WINAPI
MotifTrackCF_Release(LPCLASSFACTORY iface
) {
303 DMSTYLE_UnlockModule();
305 return 1; /* non-heap based object */
308 static HRESULT WINAPI
MotifTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
309 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
311 return DMUSIC_CreateDirectMusicMotifTrack (riid
, ppobj
, pOuter
);
314 static HRESULT WINAPI
MotifTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
315 TRACE("(%d)\n", dolock
);
318 DMSTYLE_LockModule();
320 DMSTYLE_UnlockModule();
325 static const IClassFactoryVtbl MotifTrackCF_Vtbl
= {
326 MotifTrackCF_QueryInterface
,
328 MotifTrackCF_Release
,
329 MotifTrackCF_CreateInstance
,
330 MotifTrackCF_LockServer
333 static IClassFactoryImpl MotifTrack_CF
= {&MotifTrackCF_Vtbl
};
335 /******************************************************************
336 * DirectMusicAuditionTrack ClassFactory
338 static HRESULT WINAPI
AuditionTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
339 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
341 if (ppobj
== NULL
) return E_POINTER
;
343 return E_NOINTERFACE
;
346 static ULONG WINAPI
AuditionTrackCF_AddRef(LPCLASSFACTORY iface
) {
347 DMSTYLE_LockModule();
349 return 2; /* non-heap based object */
352 static ULONG WINAPI
AuditionTrackCF_Release(LPCLASSFACTORY iface
) {
353 DMSTYLE_UnlockModule();
355 return 1; /* non-heap based object */
358 static HRESULT WINAPI
AuditionTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
359 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
361 return DMUSIC_CreateDirectMusicAuditionTrack (riid
, ppobj
, pOuter
);
364 static HRESULT WINAPI
AuditionTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
365 TRACE("(%d)\n", dolock
);
368 DMSTYLE_LockModule();
370 DMSTYLE_UnlockModule();
375 static const IClassFactoryVtbl AuditionTrackCF_Vtbl
= {
376 AuditionTrackCF_QueryInterface
,
377 AuditionTrackCF_AddRef
,
378 AuditionTrackCF_Release
,
379 AuditionTrackCF_CreateInstance
,
380 AuditionTrackCF_LockServer
383 static IClassFactoryImpl AuditionTrack_CF
= {&AuditionTrackCF_Vtbl
};
385 /******************************************************************
386 * DirectMusicMuteTrack ClassFactory
388 static HRESULT WINAPI
MuteTrackCF_QueryInterface(LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
) {
389 FIXME("- no interface IID: %s\n", debugstr_guid(riid
));
391 if (ppobj
== NULL
) return E_POINTER
;
393 return E_NOINTERFACE
;
396 static ULONG WINAPI
MuteTrackCF_AddRef(LPCLASSFACTORY iface
) {
397 DMSTYLE_LockModule();
399 return 2; /* non-heap based object */
402 static ULONG WINAPI
MuteTrackCF_Release(LPCLASSFACTORY iface
) {
403 DMSTYLE_UnlockModule();
405 return 1; /* non-heap based object */
408 static HRESULT WINAPI
MuteTrackCF_CreateInstance(LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
) {
409 TRACE ("(%p, %s, %p)\n", pOuter
, debugstr_dmguid(riid
), ppobj
);
411 return DMUSIC_CreateDirectMusicMuteTrack (riid
, ppobj
, pOuter
);
414 static HRESULT WINAPI
MuteTrackCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
) {
415 TRACE("(%d)\n", dolock
);
418 DMSTYLE_LockModule();
420 DMSTYLE_UnlockModule();
425 static const IClassFactoryVtbl MuteTrackCF_Vtbl
= {
426 MuteTrackCF_QueryInterface
,
429 MuteTrackCF_CreateInstance
,
430 MuteTrackCF_LockServer
433 static IClassFactoryImpl MuteTrack_CF
= {&MuteTrackCF_Vtbl
};
435 /******************************************************************
440 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
) {
441 if (fdwReason
== DLL_PROCESS_ATTACH
) {
443 DisableThreadLibraryCalls(hinstDLL
);
444 /* FIXME: Initialisation */
445 } else if (fdwReason
== DLL_PROCESS_DETACH
) {
453 /******************************************************************
454 * DllCanUnloadNow (DMSTYLE.1)
458 HRESULT WINAPI
DllCanUnloadNow(void) {
459 return DMSTYLE_refCount
!= 0 ? S_FALSE
: S_OK
;
463 /******************************************************************
464 * DllGetClassObject (DMSTYLE.@)
468 HRESULT WINAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
) {
469 TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid
), debugstr_dmguid(riid
), ppv
);
471 if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicSection
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
473 IClassFactory_AddRef((IClassFactory
*)*ppv
);
475 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicStyle
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
477 IClassFactory_AddRef((IClassFactory
*)*ppv
);
479 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicChordTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
480 *ppv
= &ChordTrack_CF
;
481 IClassFactory_AddRef((IClassFactory
*)*ppv
);
483 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicCommandTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
484 *ppv
= &CommandTrack_CF
;
485 IClassFactory_AddRef((IClassFactory
*)*ppv
);
487 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicStyleTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
488 *ppv
= &StyleTrack_CF
;
489 IClassFactory_AddRef((IClassFactory
*)*ppv
);
491 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicMotifTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
492 *ppv
= &MotifTrack_CF
;
493 IClassFactory_AddRef((IClassFactory
*)*ppv
);
495 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicAuditionTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
496 *ppv
= &AuditionTrack_CF
;
497 IClassFactory_AddRef((IClassFactory
*)*ppv
);
499 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicMuteTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
500 *ppv
= &MuteTrack_CF
;
501 IClassFactory_AddRef((IClassFactory
*)*ppv
);
505 WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid
), debugstr_dmguid(riid
), ppv
);
506 return CLASS_E_CLASSNOTAVAILABLE
;
509 /***********************************************************************
510 * DllRegisterServer (DMSTYLE.@)
512 HRESULT WINAPI
DllRegisterServer(void)
514 return __wine_register_resources( instance
, NULL
);
517 /***********************************************************************
518 * DllUnregisterServer (DMSTYLE.@)
520 HRESULT WINAPI
DllUnregisterServer(void)
522 return __wine_unregister_resources( instance
, NULL
);