- implemented loader, loader's stream and loading of objects (now you
[wine/wine64.git] / dlls / dmcompos / dmcompos_main.c
blob75bf4ca7283ca3d1b81ef501f149c1e3324ebacc
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);
24 typedef struct
26 /* IUnknown fields */
27 ICOM_VFIELD(IClassFactory);
28 DWORD ref;
29 } IClassFactoryImpl;
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);
39 return E_NOINTERFACE;
42 static ULONG WINAPI ChordMapCF_AddRef(LPCLASSFACTORY iface)
44 ICOM_THIS(IClassFactoryImpl,iface);
45 return ++(This->ref);
48 static ULONG WINAPI ChordMapCF_Release(LPCLASSFACTORY iface)
50 ICOM_THIS(IClassFactoryImpl,iface);
51 /* static class, won't be freed */
52 return --(This->ref);
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);
67 return E_NOINTERFACE;
70 static HRESULT WINAPI ChordMapCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
72 ICOM_THIS(IClassFactoryImpl,iface);
73 FIXME("(%p)->(%d),stub!\n", This, dolock);
74 return S_OK;
77 static ICOM_VTABLE(IClassFactory) ChordMapCF_Vtbl = {
78 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
79 ChordMapCF_QueryInterface,
80 ChordMapCF_AddRef,
81 ChordMapCF_Release,
82 ChordMapCF_CreateInstance,
83 ChordMapCF_LockServer
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);
96 return E_NOINTERFACE;
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);
129 return S_OK;
132 static ICOM_VTABLE(IClassFactory) ComposerCF_Vtbl = {
133 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
134 ComposerCF_QueryInterface,
135 ComposerCF_AddRef,
136 ComposerCF_Release,
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);
185 return S_OK;
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);
229 /* nothing yet */
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);
239 return S_OK;
242 static ICOM_VTABLE(IClassFactory) TemplateCF_Vtbl = {
243 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
244 TemplateCF_QueryInterface,
245 TemplateCF_AddRef,
246 TemplateCF_Release,
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);
295 return S_OK;
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 /******************************************************************
310 * DllMain
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)
323 /* FIXME: Cleanup */
326 return TRUE;
330 /******************************************************************
331 * DllCanUnloadNow (DMCOMPOS.1)
335 HRESULT WINAPI DMCOMPOS_DllCanUnloadNow(void)
337 FIXME("(void): stub\n");
339 return S_FALSE;
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);
354 return S_OK;
355 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicComposer) && IsEqualIID (riid, &IID_IClassFactory)) {
356 *ppv = (LPVOID) &Composer_CF;
357 IClassFactory_AddRef((IClassFactory*)*ppv);
358 return S_OK;
359 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicChordMapTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
360 *ppv = (LPVOID) &ChordMapTrack_CF;
361 IClassFactory_AddRef((IClassFactory*)*ppv);
362 return S_OK;
363 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTemplate) && IsEqualIID (riid, &IID_IClassFactory)) {
364 *ppv = (LPVOID) &Template_CF;
365 IClassFactory_AddRef((IClassFactory*)*ppv);
366 return S_OK;
367 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSignPostTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
368 *ppv = (LPVOID) &SignPostTrack_CF;
369 IClassFactory_AddRef((IClassFactory*)*ppv);
370 return S_OK;
373 WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
374 return CLASS_E_CLASSNOTAVAILABLE;