windows-nt/Source/XPSP1/NT/net/mmc/common/ccdata.cpp
2020-09-26 16:20:57 +08:00

233 lines
6.4 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
/**********************************************************************/
/*
ccdata.cpp
base class for the IAbout interface for MMC
FILE HISTORY:
*/
#include <stdafx.h>
#include "ccdata.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CComponentData::CComponentData()
{
}
CComponentData::~CComponentData()
{
}
IMPLEMENT_ADDREF_RELEASE(CComponentData)
STDMETHODIMP CComponentData::QueryInterface(REFIID riid, LPVOID *ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Is the pointer bad?
if (ppv == NULL)
return E_INVALIDARG;
// Place NULL in *ppv in case of failure
*ppv = NULL;
// This is the non-delegating IUnknown implementation
if (riid == IID_IUnknown)
*ppv = (LPVOID) this;
else if (riid == IID_IComponentData)
*ppv = (IComponentData *) this;
else if (riid == IID_IExtendPropertySheet)
*ppv = (IExtendPropertySheet *) this;
else if (riid == IID_IExtendPropertySheet2)
*ppv = (IExtendPropertySheet2 *) this;
else if (riid == IID_IExtendContextMenu)
*ppv = (IExtendContextMenu *) this;
else if (riid == IID_IPersistStreamInit)
*ppv = (IPersistStreamInit *) this;
// If we're going to return an interface, AddRef it first
if (*ppv)
{
((LPUNKNOWN) *ppv)->AddRef();
return hrOK;
}
else
return E_NOINTERFACE;
}
/*!--------------------------------------------------------------------------
CComponentData::FinalConstruct()
Initialize values
Author:
Modifide 12/12/97 WeiJiang, Check return value from
CreateTFSComponentData and check the result
---------------------------------------------------------------------------*/
HRESULT
CComponentData::FinalConstruct()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HRESULT hr = S_OK;
IComponentData * pComponentData = NULL;
// Create the underlying TFSComponentData
hr = CreateTFSComponentData(&pComponentData,
(ITFSCompDataCallback *) &m_ITFSCompDataCallback);
//
if(S_OK == hr)
{
m_spTFSComponentData.Query(pComponentData);
m_spComponentData = pComponentData;
m_spExtendPropertySheet.Query(pComponentData);
m_spExtendContextMenu.Query(pComponentData);
m_spSnapinHelp.Query(pComponentData);
}
return hr;
}
/*!--------------------------------------------------------------------------
CComponentData::FinalRelease()
Called when the COM object is going away
Author:
---------------------------------------------------------------------------*/
void
CComponentData::FinalRelease()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_spTFSComponentData.Release();
// Call destroy on our TFSComponentData if needed
if (m_spComponentData)
m_spComponentData->Destroy();
m_spComponentData.Release();
m_spExtendPropertySheet.Release();
m_spExtendContextMenu.Release();
m_spSnapinHelp.Release();
}
/*---------------------------------------------------------------------------
Implementation of EITFSCompDataCallback
---------------------------------------------------------------------------*/
STDMETHODIMP CComponentData::EITFSCompDataCallback::QueryInterface(REFIID iid,void **ppv)
{
*ppv = 0;
if (iid == IID_IUnknown)
*ppv = (IUnknown *) this;
else if (iid == IID_ITFSCompDataCallback)
*ppv = (ITFSCompDataCallback *) this;
else
return ResultFromScode(E_NOINTERFACE);
((IUnknown *) *ppv)->AddRef();
return hrOK;
}
STDMETHODIMP_(ULONG) CComponentData::EITFSCompDataCallback::AddRef()
{
return 1;
}
STDMETHODIMP_(ULONG) CComponentData::EITFSCompDataCallback::Release()
{
return 1;
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::GetClassID(LPCLSID pClassID)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetClassID)
return pThis->GetClassID(pClassID);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::IsDirty()
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, IsDirty())
return pThis->IsDirty();
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::Load(LPSTREAM pStm)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, Load)
return pThis->Load(pStm);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::Save(LPSTREAM pStm, BOOL fClearDirty)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, Save)
return pThis->Save(pStm, fClearDirty);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::GetSizeMax(ULARGE_INTEGER *pcbSize)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetSizeMax)
return pThis->GetSizeMax(pcbSize);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::InitNew()
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, InitNew)
return pThis->InitNew();
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnInitialize(LPIMAGELIST lpScopeImage)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnInitialize);
return pThis->OnInitialize(lpScopeImage);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnInitializeNodeMgr(ITFSComponentData *pTFSCompData, ITFSNodeMgr *pNodeMgr)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnInitializeNodeMgr);
return pThis->OnInitializeNodeMgr(pTFSCompData, pNodeMgr);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnCreateComponent(LPCOMPONENT *ppComponent)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnCreateComponent);
return pThis->OnCreateComponent(ppComponent);
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnDestroy()
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnDestroy);
return pThis->OnDestroy();
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnNotifyPropertyChange(LPDATAOBJECT pDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM lParam)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnNotifyPropertyChange);
return pThis->OnNotifyPropertyChange(pDataObject, event, arg, lParam);
}
STDMETHODIMP_(const CLSID *) CComponentData::EITFSCompDataCallback::GetCoClassID()
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, GetCoClassID);
return pThis->GetCoClassID();
}
STDMETHODIMP CComponentData::EITFSCompDataCallback::OnCreateDataObject(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, IDataObject **ppDataObject)
{
EMPrologIsolated(CComponentData, ITFSCompDataCallback, OnCreateDataObject);
return pThis->OnCreateDataObject(cookie, type, ppDataObject);
}