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.
100 lines
2.9 KiB
100 lines
2.9 KiB
// 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_
|
|
|