2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/classfactory.cpp
5 * PURPOSE: IClassFactory interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class CClassFactory
: public IClassFactory
14 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
16 STDMETHODIMP_(ULONG
) AddRef()
18 InterlockedIncrement(&m_Ref
);
21 STDMETHODIMP_(ULONG
) Release()
23 InterlockedDecrement(&m_Ref
);
33 HRESULT WINAPI
CreateInstance(LPUNKNOWN pUnkOuter
, REFIID riid
, LPVOID
*ppvObject
);
34 HRESULT WINAPI
LockServer(BOOL fLock
);
36 CClassFactory(LPFNCREATEINSTANCE lpfnCI
, PLONG pcRefDll
, IID
*riidInst
) : m_Ref(1), m_lpfnCI(lpfnCI
), m_IID(riidInst
)
39 virtual ~CClassFactory(){};
43 LPFNCREATEINSTANCE m_lpfnCI
;
49 CClassFactory::QueryInterface(
54 if(IsEqualIID(riid
, IID_IUnknown
) || IsEqualIID(riid
, IID_IClassFactory
))
56 *ppvObj
= PVOID(this);
57 InterlockedIncrement(&m_Ref
);
65 CClassFactory::CreateInstance(
70 WCHAR Buffer
[MAX_PATH
];
75 StringFromCLSID(riid
, &lpstr
);
77 swprintf(Buffer
, L
"riid %s", lpstr
);
78 OutputDebugStringW(Buffer
);
81 if ( m_IID
== NULL
|| IsEqualCLSID(riid
, *m_IID
) || IsEqualCLSID(riid
, IID_IUnknown
))
83 return m_lpfnCI(pUnkOuter
, riid
, ppvObject
);
91 CClassFactory::LockServer(
98 CClassFactory_fnConstructor(
99 LPFNCREATEINSTANCE lpfnCI
,
103 CClassFactory
* factory
= new CClassFactory(lpfnCI
, pcRefDll
, riidInst
);
109 InterlockedIncrement(pcRefDll
);
111 return (LPCLASSFACTORY
)factory
;