#include #include #include DLLServer sDLLServer; Console sWinConsole(Console::ConsoleType(Console::Write|Console::Read),true); ClassFactory sClassFactory(sDLLServer,sWinConsole); STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid,void **ppv) { sWinConsole.writeLine(""); *ppv=0; return sClassFactory.QueryInterface(riid,ppv); } STDAPI DllCanUnloadNow(void) { sWinConsole.writeLine(""); return (0==sDLLServer.getRefCount()&&0==sDLLServer.getLockCount()?S_OK:S_FALSE); } #if 0 BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) { switch(reasonCode) { case DLL_PROCESS_ATTACH : sWinConsole.writeLine(""); break; case DLL_PROCESS_DETACH : sWinConsole.writeLine(""); sWinConsole.read(); break; } return TRUE; } #endif InProcServer::InProcServer(IUnknown *pUnkOuter,REFIID riid,Console &winConsole) : mUnkOuter(pUnkOuter), mRefCount(0), mWinConsole(winConsole) { getConsole().writeLine(""); } InProcServer::~InProcServer() { getConsole().writeLine(""); } InProcServer &InProcServer::operator=(const InProcServer &/*someInProcServer*/) { // private implementation return *this; } HRESULT __stdcall InProcServer::QueryInterface(REFIID riid,void **ppv) { getConsole().writeLine(""); *ppv=0; if(IsEqualIID(riid,IID_IUnknown)||IsEqualIID(riid,getREFIID())) { *ppv=getInstance(); // *ppv=this; AddRef(); return NOERROR; } return ComResult::NoInterface; } ULONG __stdcall InProcServer::AddRef(void) { getConsole().writeLine(""); return ++mRefCount; } ULONG __stdcall InProcServer::Release(void) { getConsole().writeLine(""); if(0==--mRefCount)::delete this; return mRefCount; } Console &InProcServer::getConsole(void) { return mWinConsole; }