/*++ Copyright (c) 1997 Microsoft Corporation Module Name : context.h Abstract: A class to retrieve and release ASP intrinsics Author: Neil Allain ( a-neilal ) August-1997 Revision History: --*/ #include "stdafx.h" #include #include "context.h" //--------------------------------------------------------------------------- // GetServerObject // // Get an instrinic object from the current Object context //--------------------------------------------------------------------------- HRESULT CContext::GetServerObject( IGetContextProperties* pProps, BSTR bstrObjName, const IID& iid, void** ppObj ) { HRESULT rc = E_FAIL; _ASSERT( pProps ); _ASSERT( bstrObjName ); _ASSERT( ppObj ); if ( pProps && bstrObjName && ppObj ) { *ppObj = NULL; CComVariant vt; if ( !FAILED( pProps->GetProperty( bstrObjName, &vt ) ) ) { if ( V_VT(&vt) == VT_DISPATCH ) { IDispatch* pDispatch = V_DISPATCH(&vt); if ( pDispatch ) { rc = pDispatch->QueryInterface( iid, ppObj ); } } } } return rc; } HRESULT CContext::Init( DWORD dwFlags // which instrinsics to initialize ) { HRESULT rc = E_FAIL; CComPtr pObjContext; rc = ::GetObjectContext( &pObjContext ); if ( !FAILED( rc ) ) { CComPtr pProps; rc = pObjContext->QueryInterface( IID_IGetContextProperties, (void**)&pProps ); if ( !FAILED( rc ) ) { CComBSTR bstrObj; if ( dwFlags & get_Request ) { bstrObj = "Request"; rc = GetServerObject( pProps, bstrObj, IID_IRequest, (void**)&m_piRequest ); } if ( !FAILED(rc) && ( dwFlags & get_Response ) ) { bstrObj = "Response"; rc = GetServerObject( pProps, bstrObj, IID_IResponse, (void**)&m_piResponse ); } if ( !FAILED(rc) && ( dwFlags & get_Session ) ) { bstrObj = "Session"; rc = GetServerObject( pProps, bstrObj, IID_ISessionObject, (void**)&m_piSession ); } if ( !FAILED(rc) && ( dwFlags & get_Server ) ) { bstrObj = "Server"; rc = GetServerObject( pProps, bstrObj, IID_IServer, (void**)&m_piServer ); } if ( !FAILED(rc) && ( dwFlags & get_Application ) ) { bstrObj = "Application"; rc = GetServerObject( pProps, bstrObj, IID_IApplicationObject, (void**)&m_piApplication ); } } } return rc; }