Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
4.8 KiB

//---------------------------------------------------------------------------
// NotifyConnPtCn.cpp : CVDNotifyDBEventsConnPtCont implementation file
//
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
// Developed by Sheridan Software Systems, Inc.
//---------------------------------------------------------------------------
#include "stdafx.h"
#include "NConnPt.h"
#include "NConnPtC.h"
#include "enumcnpt.h"
#include "Notifier.h"
#include "RSSource.h"
// needed for ASSERTs and FAIL
//
SZTHISFILE
//=--------------------------------------------------------------------------=
// CVDNotifyDBEventsConnPtCont constructor
//
CVDNotifyDBEventsConnPtCont::CVDNotifyDBEventsConnPtCont()
{
m_pNotifier = NULL;
#ifdef _DEBUG
g_cVDNotifyDBEventsConnPtContCreated++;
#endif
}
//=--------------------------------------------------------------------------=
// CVDNotifyDBEventsConnPtCont destructor
//
CVDNotifyDBEventsConnPtCont::~CVDNotifyDBEventsConnPtCont()
{
RELEASE_OBJECT(m_pNotifyDBEventsConnPt)
#ifdef _DEBUG
g_cVDNotifyDBEventsConnPtContDestroyed++;
#endif
}
//=--------------------------------------------------------------------------=
// Create - Create connection point container object
//=--------------------------------------------------------------------------=
// This function creates a new connection point container object
//
// Parameters:
// pConnPtContainer - [in] a pointer to rowset object
// ppNotifyDBEventsConnPt - [out] a pointer in which to return pointer to
// connection point container object
//
// Output:
// HRESULT - S_OK if successful
// E_OUTOFMEMORY not enough memory to create object
//
// Notes:
//
HRESULT CVDNotifyDBEventsConnPtCont::Create(CVDNotifier * pNotifier, CVDNotifyDBEventsConnPtCont ** ppConnPtContainer)
{
*ppConnPtContainer = NULL;
CVDNotifyDBEventsConnPtCont * pConnPtContainer = new CVDNotifyDBEventsConnPtCont();
if (!pConnPtContainer)
return E_OUTOFMEMORY;
pConnPtContainer->m_pNotifier = pNotifier;
CVDNotifyDBEventsConnPt::Create(pConnPtContainer, &pConnPtContainer->m_pNotifyDBEventsConnPt);
if (!pConnPtContainer->m_pNotifyDBEventsConnPt)
{
delete pConnPtContainer;
return E_OUTOFMEMORY;
}
*ppConnPtContainer = pConnPtContainer;
return S_OK;
}
//=--------------------------------------------------------------------------=
// Destroy - Destroy this connection point container object
//
void CVDNotifyDBEventsConnPtCont::Destroy()
{
delete this;
}
//=--------------------------------------------------------------------------=
// IUnknown QueryInterface
//
HRESULT CVDNotifyDBEventsConnPtCont::QueryInterface(REFIID riid, void **ppvObjOut)
{
return ((CVDNotifier*)m_pNotifier)->QueryInterface(riid, ppvObjOut); // logically part of CVDNotifier derived object;
}
//=--------------------------------------------------------------------------=
// IUnknown AddRef
//
ULONG CVDNotifyDBEventsConnPtCont::AddRef(void)
{
return ((CVDNotifier*)m_pNotifier)->AddRef(); // logically part of CVDNotifier derived object
}
//=--------------------------------------------------------------------------=
// IUnknown Release
//
ULONG CVDNotifyDBEventsConnPtCont::Release(void)
{
return ((CVDNotifier*)m_pNotifier)->Release(); // logically part of CVDNotifier derived object
}
//=--------------------------------------------------------------------------=
// IConnectionPointContainer Methods
//=--------------------------------------------------------------------------=
//=--------------------------------------------------------------------------=
// IConnectionPointContainer EnumConnectionPoints
//
HRESULT CVDNotifyDBEventsConnPtCont::EnumConnectionPoints(LPENUMCONNECTIONPOINTS FAR* ppEnum)
{
ASSERT_POINTER(ppEnum, LPENUMCONNECTIONPOINTS)
CVDEnumConnPoints* pEnum = NULL;
if (m_pNotifyDBEventsConnPt)
{
pEnum = new CVDEnumConnPoints(m_pNotifyDBEventsConnPt);
if (!pEnum)
{
*ppEnum = NULL;
return E_OUTOFMEMORY;
}
}
*ppEnum = pEnum;
return (pEnum != NULL) ? S_OK : CONNECT_E_NOCONNECTION;
}
//=--------------------------------------------------------------------------=
// IConnectionPointContainer FindConnectionPoint
//
HRESULT CVDNotifyDBEventsConnPtCont::FindConnectionPoint(REFIID iid, LPCONNECTIONPOINT FAR* ppCP)
{
ASSERT_POINTER(ppCP, LPCONNECTIONPOINT)
if (m_pNotifyDBEventsConnPt)
{
// there is only one connection point supported - IID_INotifyDBEvents
if (DO_GUIDS_MATCH(iid, IID_INotifyDBEvents))
{
m_pNotifyDBEventsConnPt->AddRef();
*ppCP = m_pNotifyDBEventsConnPt;
return S_OK;
}
}
return E_NOINTERFACE;
}