rendered paste body/* code: */#include <objbase.h>#include "com_main.h"#include "tracemsg.h"EXPORT IUnknown* CreateInstance(){ TraceMsg tm("CreateInstance"); IUnknown* pIUnknown = (ITest*) new CTest; return pIUnknown;}CTest::CTest(){ TraceMsg tm("CTest::CTest"); this->refCount=0; this->topSecret=0;}HRESULT __stdcall CTest::QueryInterface(const IID& iid, void** ppv){ TraceMsg tm("CTest::QueryInterface"); if (iid == IID_IUnknown) { tm.msg("Asking for IUnknown, returning pointer"); *ppv = (IUnknown*)this; } else if (iid == IID_ITest) { tm.msg("Asking for ITest, returning pointer"); *ppv = (ITest*)this; } else { tm.msg("Asking for unrecognized or unimplemented interface, returning error"); *ppv = NULL; return E_NOINTERFACE; } this->AddRef(); return S_OK;}ULONG __stdcall CTest::AddRef(){ TraceMsg tm("CTest::AddRef"); tm.msg("Incrementing reference count"); this->refCount++; tm.msg("%d references existing",this->refCount); return this->refCount;}ULONG __stdcall CTest::Release(){ TraceMsg tm("CTest::Release"); tm.msg("Decrementing reference count"); if(--this->refCount == 0) { tm.msg("No references left, freeing object"); delete this; return 0; } tm.msg("%d references existing",this->refCount); return this->refCount;}void __stdcall CTest::SetNumber(long number){ TraceMsg tm("CTest::SetNumber"); tm.msg("Number changed from %d to %d",this->topSecret, number); this->topSecret = number;}long __stdcall CTest::GetNumber(){ TraceMsg tm("CTest::GetNumber"); tm.msg("Retrieving number (%d)",this->topSecret); return this->topSecret;}/*output:CreateInstance{ CTest::CTest { }}CTest::QueryInterface{ msg: Asking for ITest, returning pointer CTest::AddRef { msg: Incrementing reference count msg: 1 references existing }}CTest::SetNumber{ msg: Number changed from 0 to 42}CTest::GetNumber{ msg: Retrieving number (42)}CTest::Release{ msg: Decrementing reference count msg: No references left, freeing object}*/