#include "StdAfx.h"
#include "classfactory.h"
#include "VsPackage.h"
START_IMPL_SPY(IClassFactory,5)
STDMETHODIMP CF_QueryInterface( void* pThat, REFIID refiid, LPVOID* ppv )
{
HRESULT hr;
CDbg::Trace( " IClassFactory::QueryInterface(%p, refiid=", pThat );
CDbg::TraceGuid( refiid );
CDbg::TraceC( "[out]ppv )\n" );
CALL_METHOD3(0,pThat,refiid,ppv)
GET_RET_VAL(hr)
CDbg::Trace( " IClassFactory::QueryInterface(,,[out](?)ppv=0x%p ) = %X", *ppv, hr );
CDbg::TraceGuid( refiid );
if ( refiid == IID_IVsPackage )
{
CDbg::Trace( "###ClassFactory.cpp - NOT PRINTED\n\n" );
}
return hr;
}
STDMETHODIMP_(ULONG) CF_AddRef(void* pThat)
{
ULONG uRC;
CALL_METHOD1(1,pThat);//AddRef();
GET_RET_VAL(uRC);
//CDbg::Trace( " IClassFactory::AddRef returned %u\n", uRC );
return uRC;
}
STDMETHODIMP_(ULONG) CF_Release(void* pThat)
{
ULONG uRC;
CALL_METHOD1(2,pThat)//Release();
GET_RET_VAL(uRC);
//CDbg::Trace( " IClassFactory::Release returned %u\n", uRC );
return uRC;
}
STDMETHODIMP CF_CreateInstance( void* pThat, IUnknown * pUnkOuter, REFIID riid, void ** ppvObject )
{
HRESULT hr;
CDbg::Trace( " IClassFactory::CreateInstance(0x%p, pUnkOuter, 0x%p, riid=", pThat, pUnkOuter );
CDbg::TraceGuid( riid );
CDbg::TraceC( ",[out]ppvObject)\n" );
CALL_METHOD4(3,pThat,pUnkOuter,riid,ppvObject)//CreateInstance( pUnkOuter, riid, ppvObject );
GET_RET_VAL(hr)
if ( riid == IID_IVsPackage )
{
SET_SPY(IVsPackage,*ppvObject);
CDbg::Trace( "<--------------->IVsPackage subclassed: obj=0x%p\n", *ppvObject );
}
CDbg::Trace( " IClassFactory::CreateInstance( , , , ppvObject=0x%p )= %X\n", *ppvObject, hr );
return hr;
}
STDMETHODIMP CF_LockServer( void* pThat, BOOL fLock )
{
HRESULT hr;
CALL_METHOD2(4,pThat,fLock)//LockServer( fLock );
GET_RET_VAL(hr);
//CDbg::Trace( " ClsF::LockServer returned %X\n", hr );
return hr;
}
SPY_START_VTBL(5)
SPY_ENTRY_(CF_QueryInterface,0)
SPY_ENTRY_(CF_AddRef,1)
SPY_ENTRY_(CF_Release,2)
SPY_ENTRY_(CF_CreateInstance,3)
SPY_ENTRY_(CF_LockServer,4)
SPY_END_VTBL()
END_IMPL_SPY()
//D-
/*
CClassFactory::CClassFactory(void)
{
m_pCF = NULL;
}
CClassFactory::~CClassFactory(void)
{
}
void CClassFactory::Attach( IClassFactory* pCF )
{
if ( m_pCF == NULL )
{
m_pCF = pCF;
CDbg::Trace( " Class Factory attached (pCF=%p)\n", m_pCF );
}
}
// IUnknown
STDMETHODIMP CClassFactory::QueryInterface( REFIID refiid, LPVOID* ppv )
{
if ( m_pCF )
{
HRESULT hr = m_pCF->QueryInterface( refiid, ppv );
CDbg::Trace( " ClsF::QueryInterface returned %X, ptr=%p, REFIID=", hr, *ppv );
CDbg::TraceGuid( refiid );
if ( refiid == IID_IVsPackage )
{
if ( m_VP.Attach( (IVsPackage*)*ppv ) )
{
*ppv = &m_VP; // sic
}
}
return hr;
}
return E_INVALIDARG;
}
STDMETHODIMP_(ULONG) CClassFactory::AddRef(void)
{
if ( m_pCF )
{
ULONG uRC = m_pCF->AddRef();
CDbg::Trace( " ClsF::AddRef returned %u\n", uRC );
return uRC;
}
return 0;
}
STDMETHODIMP_(ULONG) CClassFactory::Release(void)
{
if ( m_pCF )
{
ULONG uRC = m_pCF->Release();
CDbg::Trace( " ClsF::Release returned %u\n", uRC );
if ( 0 == uRC )
{
m_pCF = NULL;
}
return uRC;
}
return 0;
}
// IClassFactory
STDMETHODIMP CClassFactory::CreateInstance( IUnknown * pUnkOuter, REFIID riid, void ** ppvObject )
{
if ( m_pCF )
{
HRESULT hr = m_pCF->CreateInstance( pUnkOuter, riid, ppvObject );
CDbg::Trace( " ClsF::CreateInstance returned %X, pUnkOuter=%p, ppv=%p, REFIID=", hr, pUnkOuter, *ppvObject );
CDbg::TraceGuid( riid );
if ( riid == IID_IVsPackage )
{
if ( m_VP.Attach( (IVsPackage*)*ppvObject ) )
{
*ppvObject = &m_VP; // sic
}
}
return hr;
}
return E_INVALIDARG;
}
STDMETHODIMP CClassFactory::LockServer( BOOL fLock )
{
if ( m_pCF )
{
HRESULT hr = m_pCF->LockServer( fLock );
CDbg::Trace( " ClsF::LockServer returned %X\n", hr );
return hr;
}
return E_INVALIDARG;
}
*/