#include void *InProcServerDemoInstantiator::instantiate(IUnknown *pUnkOuter,REFIID riid,void **ppv) { ComResult comResult; InProcServerDemo *pInProcServerDemo; pInProcServerDemo=::new InProcServerDemo(pUnkOuter,riid); if(!pInProcServerDemo)throw Instantiator::NoMemory(); comResult=pInProcServerDemo->QueryInterface(riid,ppv); if(comResult.isFailure()) { ::delete pInProcServerDemo; throw Instantiator::NoInterface(); } return pInProcServerDemo; } InProcServerDemo::InProcServerDemo(IUnknown *pUnkOuter,REFIID riid) : mValue(0), mRefCount(0) { // getConsole().writeLine(""); if(!IsEqualIID(riid,IID_IDemo))throw Instantiator::NoInterface(); } InProcServerDemo::~InProcServerDemo() { // getConsole().writeLine(""); } HRESULT __stdcall InProcServerDemo::getValue(int *pvalue) { // getConsole().writeLine(""); if(!pvalue)return ComResult::InvalidArg; *pvalue=mValue; return ComResult::NoError; } HRESULT __stdcall InProcServerDemo::setValue(int value) { // getConsole().writeLine(""); mValue=value; return ComResult::NoError; } HRESULT __stdcall InProcServerDemo::QueryInterface(REFIID riid,void **ppv) { // getConsole().writeLine(""); *ppv=0; if(IsEqualIID(riid,IID_IUnknown)||IsEqualIID(riid,IID_IDemo)) { *ppv=this; AddRef(); return NOERROR; } return ComResult::NoInterface; } ULONG __stdcall InProcServerDemo::AddRef(void) { // getConsole().writeLine(""); return ++mRefCount; } ULONG __stdcall InProcServerDemo::Release(void) { // getConsole().writeLine(""); if(0==--mRefCount)::delete this; return mRefCount; }