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
);
27 ICOM_VFIELD(IClassFactory
);
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
);
43 static ULONG WINAPI
BandCF_AddRef(LPCLASSFACTORY iface
)
45 ICOM_THIS(IClassFactoryImpl
,iface
);
49 static ULONG WINAPI
BandCF_Release(LPCLASSFACTORY iface
)
51 ICOM_THIS(IClassFactoryImpl
,iface
);
52 /* static class, won't be freed */
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
);
71 static HRESULT WINAPI
BandCF_LockServer(LPCLASSFACTORY iface
,BOOL dolock
)
73 ICOM_THIS(IClassFactoryImpl
,iface
);
74 FIXME("(%p)->(%d),stub!\n", This
, dolock
);
78 static ICOM_VTABLE(IClassFactory
) BandCF_Vtbl
= {
79 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
80 BandCF_QueryInterface
,
83 BandCF_CreateInstance
,
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
);
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
);
136 static ICOM_VTABLE(IClassFactory
) BandTrackCF_Vtbl
= {
137 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
138 BandTrackCF_QueryInterface
,
141 BandTrackCF_CreateInstance
,
142 BandTrackCF_LockServer
145 static IClassFactoryImpl BandTrack_CF
= {&BandTrackCF_Vtbl
, 1 };
147 /******************************************************************
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
)
168 /******************************************************************
169 * DllCanUnloadNow (DMBAND.1)
173 HRESULT WINAPI
DMBAND_DllCanUnloadNow(void)
175 FIXME("(void): stub\n");
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
);
194 } else if (IsEqualCLSID (rclsid
, &CLSID_DirectMusicBandTrack
) && IsEqualIID (riid
, &IID_IClassFactory
)) {
195 *ppv
= (LPVOID
) &BandTrack_CF
;
196 IClassFactory_AddRef((IClassFactory
*)*ppv
);
200 WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
201 return CLASS_E_CLASSNOTAVAILABLE
;