Add a couple of missing spec files.
[wine.git] / dlls / dmband / dmband_main.c
blob09ba2e42f5331c53128773b1ecbab3ceff3cd254
1 /* DirectMusicBand 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 "dmband_private.h"
22 WINE_DEFAULT_DEBUG_CHANNEL(dmband);
24 typedef struct
26 /* IUnknown fields */
27 ICOM_VFIELD(IClassFactory);
28 DWORD ref;
29 } IClassFactoryImpl;
31 /******************************************************************
32 * DirectMusicBand ClassFactory
35 static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
37 ICOM_THIS(IClassFactoryImpl,iface);
39 FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
40 return E_NOINTERFACE;
43 static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface)
45 ICOM_THIS(IClassFactoryImpl,iface);
46 return ++(This->ref);
49 static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface)
51 ICOM_THIS(IClassFactoryImpl,iface);
52 /* static class, won't be freed */
53 return --(This->ref);
56 static HRESULT WINAPI BandCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
58 ICOM_THIS(IClassFactoryImpl,iface);
60 TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
61 if (IsEqualIID (riid, &IID_IDirectMusicBand)) {
62 return DMUSIC_CreateDirectMusicBand (riid, (LPDIRECTMUSICBAND*) ppobj, pOuter);
63 } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
64 return DMUSIC_CreateDirectMusicBandObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
67 WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
68 return E_NOINTERFACE;
71 static HRESULT WINAPI BandCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
73 ICOM_THIS(IClassFactoryImpl,iface);
74 FIXME("(%p)->(%d),stub!\n", This, dolock);
75 return S_OK;
78 static ICOM_VTABLE(IClassFactory) BandCF_Vtbl = {
79 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
80 BandCF_QueryInterface,
81 BandCF_AddRef,
82 BandCF_Release,
83 BandCF_CreateInstance,
84 BandCF_LockServer
87 static IClassFactoryImpl Band_CF = {&BandCF_Vtbl, 1 };
90 /******************************************************************
91 * DirectMusicBandTrack ClassFactory
94 static HRESULT WINAPI BandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
96 ICOM_THIS(IClassFactoryImpl,iface);
98 FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
99 return E_NOINTERFACE;
102 static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface)
104 ICOM_THIS(IClassFactoryImpl,iface);
105 return ++(This->ref);
108 static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface)
110 ICOM_THIS(IClassFactoryImpl,iface);
111 /* static class, won't be freed */
112 return --(This->ref);
115 static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
117 ICOM_THIS(IClassFactoryImpl,iface);
119 TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
120 if (IsEqualIID (riid, &IID_IDirectMusicTrack)
121 || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
122 return DMUSIC_CreateDirectMusicBandTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
125 WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
126 return E_NOINTERFACE;
129 static HRESULT WINAPI BandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
131 ICOM_THIS(IClassFactoryImpl,iface);
132 FIXME("(%p)->(%d),stub!\n", This, dolock);
133 return S_OK;
136 static ICOM_VTABLE(IClassFactory) BandTrackCF_Vtbl = {
137 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
138 BandTrackCF_QueryInterface,
139 BandTrackCF_AddRef,
140 BandTrackCF_Release,
141 BandTrackCF_CreateInstance,
142 BandTrackCF_LockServer
145 static IClassFactoryImpl BandTrack_CF = {&BandTrackCF_Vtbl, 1 };
147 /******************************************************************
148 * DllMain
152 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
154 if (fdwReason == DLL_PROCESS_ATTACH)
156 DisableThreadLibraryCalls(hinstDLL);
157 /* FIXME: Initialisation */
159 else if (fdwReason == DLL_PROCESS_DETACH)
161 /* FIXME: Cleanup */
164 return TRUE;
168 /******************************************************************
169 * DllCanUnloadNow (DMBAND.1)
173 HRESULT WINAPI DMBAND_DllCanUnloadNow(void)
175 FIXME("(void): stub\n");
177 return S_FALSE;
181 /******************************************************************
182 * DllGetClassObject (DMBAND.2)
186 HRESULT WINAPI DMBAND_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
188 TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
190 if (IsEqualCLSID (rclsid, &CLSID_DirectMusicBand) && IsEqualIID (riid, &IID_IClassFactory)) {
191 *ppv = (LPVOID) &Band_CF;
192 IClassFactory_AddRef((IClassFactory*)*ppv);
193 return S_OK;
194 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicBandTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
195 *ppv = (LPVOID) &BandTrack_CF;
196 IClassFactory_AddRef((IClassFactory*)*ppv);
197 return S_OK;
200 WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
201 return CLASS_E_CLASSNOTAVAILABLE;