WindowsXP-SP1/enduser/netmeeting/core/connpnts.h

100 lines
2.9 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// File: connpnts.h
#ifndef _IMCONNPT_H_
#define _IMCONNPT_H_
#include "nmenum.h"
typedef HRESULT (*CONN_NOTIFYPROC)(IUnknown *pUnk, void *pv, REFIID riid);
//****************************************************************************
// CConnectionPoint definition
//****************************************************************************
//
class CConnectionPoint : public IConnectionPoint, public DllRefCount
{
private:
IID m_riid;
IConnectionPointContainer *m_pCPC;
ULONG m_cSinks;
ULONG m_cAllocatedSinks;
IUnknown **m_rgSinks;
public:
// Constructor and destructor
CConnectionPoint (
const IID *pIID,
IConnectionPointContainer *pCPCInit);
~CConnectionPoint (void);
// Class public functions
void ContainerReleased() {m_pCPC = NULL;}
STDMETHODIMP Notify (void *pv, CONN_NOTIFYPROC pfn);
// IUnknown
STDMETHODIMP QueryInterface (REFIID iid, void **ppv);
STDMETHODIMP_(ULONG) AddRef (void);
STDMETHODIMP_(ULONG) Release (void);
// IConnectionPoint
STDMETHODIMP GetConnectionInterface(IID *pIID);
STDMETHODIMP GetConnectionPointContainer(IConnectionPointContainer **ppCPC);
STDMETHODIMP Advise(IUnknown *pUnk, DWORD *pdwCookie);
STDMETHODIMP Unadvise(DWORD dwCookie);
STDMETHODIMP EnumConnections(IEnumConnections **ppEnum);
};
//****************************************************************************
// CEnumConnections definition
//****************************************************************************
//
class CEnumConnections : public IEnumConnections, public DllRefCount
{
private:
int m_iIndex;
int m_cConnections;
CONNECTDATA* m_pCD;
public:
// Constructor and Initialization
CEnumConnections (IUnknown **pSinks, ULONG cSink, ULONG cAllocatedSinks);
~CEnumConnections (void);
// IUnknown
STDMETHODIMP QueryInterface (REFIID iid, void **ppv);
STDMETHODIMP_(ULONG) AddRef (void);
STDMETHODIMP_(ULONG) Release (void);
// IEnumConnections
STDMETHODIMP Next(ULONG cConnections, CONNECTDATA *rgpcn,
ULONG *pcFetched);
STDMETHODIMP Skip(ULONG cConnections);
STDMETHODIMP Reset();
STDMETHODIMP Clone(IEnumConnections **ppEnum);
};
VOID RemoveCp(CConnectionPoint ** ppCp);
class CConnectionPointContainer : public IConnectionPointContainer
{
private:
CConnectionPoint ** m_ppCp;
int m_cCp;
public:
CConnectionPointContainer(const IID **ppiid, int cCp);
~CConnectionPointContainer();
HRESULT STDMETHODCALLTYPE NotifySink(void *pv, CONN_NOTIFYPROC pfn);
// IConnectionPointContainer methods
STDMETHODIMP EnumConnectionPoints(IEnumConnectionPoints **ppEnum);
STDMETHODIMP FindConnectionPoint(REFIID riid, IConnectionPoint **ppCp);
};
typedef CEnumNmX<IEnumConnectionPoints, &IID_IEnumConnectionPoints, IConnectionPoint, CConnectionPoint> CEnumConnectionPoints;
#endif // _IMCONNPT_H_