69 lines
1.8 KiB
C++
69 lines
1.8 KiB
C++
#include <com/factory.hpp>
|
|
#include <com/result.hpp>
|
|
#include <com/instance.hpp>
|
|
|
|
ClassFactory::ClassFactory(DLLServer &server,Console &winConsole)
|
|
: mRefCount(0), mServer(server), mWinConsole(winConsole), mpInstantiator(0)
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::ClassFactory>");
|
|
}
|
|
|
|
ClassFactory::~ClassFactory()
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::~ClassFactory>");
|
|
}
|
|
|
|
HRESULT __stdcall ClassFactory::QueryInterface(REFIID riid,void **ppv)
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::QueryInterface>");
|
|
if(IsEqualIID(riid,IID_IUnknown)||IsEqualIID(riid,IID_IClassFactory))*ppv=this;
|
|
else {*ppv=0;return ComResult::NoInterface;}
|
|
AddRef();
|
|
return ComResult::NoError;
|
|
}
|
|
|
|
ULONG __stdcall ClassFactory::AddRef(void)
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::AddRef>");
|
|
return ++mRefCount;
|
|
}
|
|
|
|
ULONG __stdcall ClassFactory::Release(void)
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::Release>");
|
|
if(0==--mRefCount)
|
|
{
|
|
::delete this;
|
|
return 0;
|
|
}
|
|
return mRefCount;
|
|
}
|
|
|
|
HRESULT __stdcall ClassFactory::CreateInstance(IUnknown *pUnkOuter,REFIID riid,void **ppv)
|
|
{
|
|
void *pInstanceItem;
|
|
|
|
mWinConsole.writeLine("<ClassFactory::CreateInstance>");
|
|
*ppv=0;
|
|
if(0!=pUnkOuter&&riid!=IID_IUnknown)return ComResult::NoAggregation;
|
|
if(!mpInstantiator)return ComResult::UnExpected;
|
|
mServer.up();
|
|
try{pInstanceItem=mpInstantiator->instantiate(pUnkOuter,riid,ppv);}
|
|
catch(Instantiator::NoInterface){mServer.down();return ComResult::NoInterface;}
|
|
catch(...){mServer.down();return ComResult::UnExpected;}
|
|
return ComResult::NoError;
|
|
}
|
|
|
|
long __stdcall ClassFactory::LockServer(int lock)
|
|
{
|
|
mWinConsole.writeLine("<ClassFactory::LockServer>");
|
|
if(lock)mServer.lock();
|
|
else mServer.unlock();
|
|
return ComResult::NoError;
|
|
}
|
|
|
|
void ClassFactory::setInstantiator(Instantiator *pInstantiator)
|
|
{
|
|
mpInstantiator=pInstantiator;
|
|
}
|