Windows2003-3790/inetcore/datacab/viaduct/msr2c/enumcnpt.cpp
2020-09-30 16:53:55 +02:00

139 lines
3.3 KiB
C++

//---------------------------------------------------------------------------
// enumcnpt.cpp : CVDEnumConnPoints implementation file
//
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
// Developed by Sheridan Software Systems, Inc.
//---------------------------------------------------------------------------
#include "stdafx.h"
#include "enumcnpt.h"
// needed for ASSERTs and FAIL
//
SZTHISFILE
//=--------------------------------------------------------------------------=
// CVDEnumConnPoints constructor
//
CVDEnumConnPoints::CVDEnumConnPoints(IConnectionPoint* pConnPt)
{
m_dwRefCount = 1;
m_dwCurrentPosition = 0;
m_pConnPt = pConnPt;
ADDREF_OBJECT(m_pConnPt);
#ifdef _DEBUG
g_cVDEnumConnPointsCreated++;
#endif
}
//=--------------------------------------------------------------------------=
// CVDEnumConnPoints destructor
//
CVDEnumConnPoints::~CVDEnumConnPoints()
{
RELEASE_OBJECT(m_pConnPt);
#ifdef _DEBUG
g_cVDEnumConnPointsDestroyed++;
#endif
}
//=--------------------------------------------------------------------------=
// IUnknown QueryInterface
//
HRESULT CVDEnumConnPoints::QueryInterface(REFIID riid, void **ppvObjOut)
{
ASSERT_POINTER(ppvObjOut, IUnknown*)
*ppvObjOut = NULL;
if (DO_GUIDS_MATCH(riid, IID_IUnknown) ||
DO_GUIDS_MATCH(riid, IID_IEnumConnectionPoints) )
{
*ppvObjOut = this;
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
//=--------------------------------------------------------------------------=
// IUnknown AddRef
//
ULONG CVDEnumConnPoints::AddRef(void)
{
return ++m_dwRefCount;
}
//=--------------------------------------------------------------------------=
// IUnknown Release
//
ULONG CVDEnumConnPoints::Release(void)
{
if (1 > --m_dwRefCount)
{
delete this;
return 0;
}
return m_dwRefCount;
}
//=--------------------------------------------------------------------------=
// IEnumConnectionPoints Methods
//=--------------------------------------------------------------------------=
//=--------------------------------------------------------------------------=
// IEnumConnectionPoints Next
//
HRESULT CVDEnumConnPoints::Next(ULONG cConnections, LPCONNECTIONPOINT FAR* rgpcn,
ULONG FAR* lpcFetched)
{
ASSERT_POINTER(rgpcn, LPCONNECTIONPOINT)
ASSERT_NULL_OR_POINTER(lpcFetched, ULONG)
if (cConnections > 0 && m_dwCurrentPosition == 0 && m_pConnPt)
{
*rgpcn = m_pConnPt;
if (lpcFetched)
*lpcFetched = 1;
m_dwCurrentPosition = 1;
return S_OK;
}
else
return S_FALSE;
}
//=--------------------------------------------------------------------------=
// IEnumConnectionPoints Skip
//
HRESULT CVDEnumConnPoints::Skip(ULONG cConnections)
{
m_dwCurrentPosition = 1;
return S_FALSE;
}
//=--------------------------------------------------------------------------=
// IEnumConnectionPoints Reset
//
HRESULT CVDEnumConnPoints::Reset()
{
m_dwCurrentPosition = 0;
return S_OK;
}
//=--------------------------------------------------------------------------=
// IEnumConnectionPoints Clone
//
HRESULT CVDEnumConnPoints::Clone(LPENUMCONNECTIONPOINTS FAR* ppEnum)
{
ASSERT_POINTER(ppEnum, LPENUMCONNECTIONPOINTS)
*ppEnum = new CVDEnumConnPoints(m_pConnPt);
return (*ppEnum != NULL) ? S_OK : E_OUTOFMEMORY;
}