2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/classfactory.cpp
5 * PURPOSE: ClassFactory interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 const GUID IID_IUnknown
= {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
12 const GUID IID_IClassFactory
= {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
14 class CClassFactory
: public IClassFactory
17 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
19 STDMETHODIMP_(ULONG
) AddRef()
21 InterlockedIncrement(&m_Ref
);
24 STDMETHODIMP_(ULONG
) Release()
26 InterlockedDecrement(&m_Ref
);
35 HRESULT WINAPI
CreateInstance(LPUNKNOWN pUnkOuter
, REFIID riid
, LPVOID
*ppvObject
);
36 HRESULT WINAPI
LockServer(BOOL fLock
);
38 CClassFactory(LPFNCREATEINSTANCE lpfnCI
, PLONG pcRefDll
, IID
*riidInst
) : m_Ref(1), m_lpfnCI(lpfnCI
), m_IID(riidInst
)
41 virtual ~CClassFactory(){};
45 LPFNCREATEINSTANCE m_lpfnCI
;
51 CClassFactory::QueryInterface(
56 if(IsEqualIID(riid
, IID_IUnknown
) || IsEqualIID(riid
, IID_IClassFactory
))
58 *ppvObj
= PVOID(this);
59 InterlockedIncrement(&m_Ref
);
67 CClassFactory::CreateInstance(
74 if ( m_IID
== NULL
|| IsEqualCLSID(riid
, *m_IID
) || IsEqualCLSID(riid
, IID_IUnknown
))
76 return m_lpfnCI(pUnkOuter
, riid
, ppvObject
);
84 CClassFactory::LockServer(
91 CClassFactory_fnConstructor(
92 LPFNCREATEINSTANCE lpfnCI
,
96 CClassFactory
* factory
= new CClassFactory(lpfnCI
, pcRefDll
, riidInst
);
102 InterlockedIncrement(pcRefDll
);
104 return (LPCLASSFACTORY
)factory
;