2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Configuration of network devices
4 * FILE: dll/directx/dsound_new/classfactory.c
5 * PURPOSE: IClassFactory implementation
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
15 const IClassFactoryVtbl
*lpVtbl
;
18 LPFNCREATEINSTANCE lpfnCI
;
26 IClassFactory_fnQueryInterface(
31 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
35 /* check requested interface */
36 if(IsEqualIID(riid
, &IID_IUnknown
) || IsEqualIID(riid
, &IID_IClassFactory
))
39 InterlockedIncrement(&This
->ref
);
48 IClassFactory_fnAddRef(
51 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
53 /* increment reference count */
54 ULONG refCount
= InterlockedIncrement(&This
->ref
);
62 IClassFactory_fnRelease(
65 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
66 ULONG refCount
= InterlockedDecrement(&This
->ref
);
68 /* decrement reference count */
71 /* free class factory */
81 IClassFactory_fnCreateInstance(
87 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
94 if ( This
->riidInst
==NULL
|| IsEqualCLSID(riid
, This
->riidInst
) || IsEqualCLSID(riid
, &IID_IUnknown
) )
96 /* instantiate object */
97 return This
->lpfnCI(pUnkOuter
, riid
, ppvObject
);
100 return E_NOINTERFACE
;
105 WINAPI
IClassFactory_fnLockServer(
106 LPCLASSFACTORY iface
,
109 //IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
114 static const IClassFactoryVtbl dclfvt
=
116 IClassFactory_fnQueryInterface
,
117 IClassFactory_fnAddRef
,
118 IClassFactory_fnRelease
,
119 IClassFactory_fnCreateInstance
,
120 IClassFactory_fnLockServer
125 IClassFactory_fnConstructor(
126 LPFNCREATEINSTANCE lpfnCI
,
130 IClassFactoryImpl
* lpclf
;
132 lpclf
= CoTaskMemAlloc(sizeof(IClassFactoryImpl
));
134 lpclf
->lpVtbl
= &dclfvt
;
135 lpclf
->lpfnCI
= lpfnCI
;
138 InterlockedIncrement(pcRefDll
);
139 lpclf
->riidInst
= riidInst
;
141 return (LPCLASSFACTORY
)lpclf
;