|
// ----------------------------------------------------------------------------------------------
// Copyright (c) Mattias H�gstr�m.
// ----------------------------------------------------------------------------------------------
// This source code is subject to terms and conditions of the Microsoft Public License. A
// copy of the license can be found in the License.html file at the root of this distribution.
// If you cannot locate the Microsoft Public License, please send an email to
// dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
// by the terms of the Microsoft Public License.
// ----------------------------------------------------------------------------------------------
// You must not remove this notice, or any other, from this software.
// ----------------------------------------------------------------------------------------------
#include "stdafx.h"
#include "ILRewriteProfilerFactory.h"
#include "ILRewriteProfilerImpl.h"
#include "ProfilerLoggers.h"
using namespace std;
extern long g_comObjectsInUse;
ProfilerData g_profilerData;
ILRewriteProfilerFactory::ILRewriteProfilerFactory()
{
m_nRefCount=0;
InterlockedIncrement(&g_comObjectsInUse);
}
ILRewriteProfilerFactory::~ILRewriteProfilerFactory()
{
g_debugLogger.WriteLine("ILRewriteProfilerFactory::~ILRewriteProfilerFactory");
InterlockedDecrement(&g_comObjectsInUse);
}
HRESULT __stdcall ILRewriteProfilerFactory::QueryInterface(
const IID& iid,
void** ppv)
{
g_debugLogger.WriteLine("ILRewriteProfilerFactory::QueryInterface");
if ((iid == IID_IUnknown) || (iid == IID_IClassFactory))
{
*ppv = static_cast<IClassFactory*>(this) ;
}
else
{
*ppv = NULL ;
return E_NOINTERFACE ;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
return S_OK ;
}
HRESULT __stdcall ILRewriteProfilerFactory::CreateInstance(IUnknown* pUnknownOuter,
const IID& iid,
void** ppv)
{
g_debugLogger.WriteLine("ILRewriteProfilerFactory::CreateInstance");
if (!g_profilerData.m_outputLogger.IsOpen())
{
// DIAG_PRF_STACKTRACE must be defined
// If not the stack will not be saved
// It should have been opened in g_giagInit
// Not true anymore
// Added a server command to be able to set the stack log file
// return E_INVALIDARG;
}
if (pUnknownOuter != NULL)
{
return CLASS_E_NOAGGREGATION ;
}
ILRewriteProfiler* pObject = new ILRewriteProfilerImpl();
if (pObject == NULL)
{
return E_OUTOFMEMORY ;
}
return pObject->QueryInterface(iid, ppv) ;
}
ULONG __stdcall ILRewriteProfilerFactory::AddRef()
{
return InterlockedIncrement(&m_nRefCount) ;
}
ULONG __stdcall ILRewriteProfilerFactory::Release()
{
long nRefCount=0;
nRefCount=InterlockedDecrement(&m_nRefCount) ;
if (nRefCount == 0) delete this;
return nRefCount;
}
HRESULT __stdcall ILRewriteProfilerFactory::LockServer(BOOL bLock)
{
return E_NOTIMPL;
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Mattias works at Visma, a leading Nordic ERP solution provider. He has good knowledge in C++/.Net development, test tool development, and debugging. His great passion is memory dump analysis. He likes giving talks and courses.