#ifndef __CONNECTION_POINT_STUFF_H #define __CONNECTION_POINT_STUFF_H /////////////////////////////////////////////////////////////////////////////// /* File: connect.h Description: Provides declarations required for the quota controller to support OLE connection points. Revision History: Date Description Programmer -------- --------------------------------------------------- ---------- 06/19/96 Initial creation. BrianAu */ /////////////////////////////////////////////////////////////////////////////// #ifndef _INC_DSKQUOTA_H # include "dskquota.h" #endif #ifndef _INC_DSKQUOTA_USER_H # include "user.h" // MAX_USERNAME #endif #ifndef _INC_DSKQUOTA_OADISP_H # include "oadisp.h" // OleAutoDispatch class. #endif #ifndef _INC_DSKQUOTA_DISPATCH_H # include "dispatch.h" #endif class ConnectionPoint : public IConnectionPoint, public IDispatch { private: LONG m_cRef; // Class object ref count. DWORD m_cConnections; // Number of connections. DWORD m_dwCookieNext; // Next cookie value to hand out. LPUNKNOWN m_pUnkContainer; // IUnknown of ConnectionPointEnumerator REFIID m_riid; // Reference to IID supported by conn pt. HANDLE m_hMutex; OleAutoDispatch m_Dispatch; CArray m_ConnectionList; void Lock(void) { WaitForSingleObject(m_hMutex, INFINITE); } void ReleaseLock(void) { ReleaseMutex(m_hMutex); } // // Prevent copying. // ConnectionPoint(const ConnectionPoint&); void operator = (const ConnectionPoint&); public: ConnectionPoint(LPUNKNOWN pUnkContainer, REFIID riid); ~ConnectionPoint(void); // // IUnknown methods. // STDMETHODIMP QueryInterface( REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef( VOID); STDMETHODIMP_(ULONG) Release( VOID); // // IConnectionPoint methods. // STDMETHODIMP GetConnectionInterface( LPIID pIID); STDMETHODIMP GetConnectionPointContainer( PCONNECTIONPOINTCONTAINER *ppCPC); STDMETHODIMP Advise( LPUNKNOWN pUnkSink, LPDWORD pdwCookie); STDMETHODIMP Unadvise( DWORD dwCookie); STDMETHODIMP EnumConnections( PENUMCONNECTIONS *ppEnum); // // IDispatch methods. // STDMETHODIMP GetIDsOfNames( REFIID riid, OLECHAR ** rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); STDMETHODIMP GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); STDMETHODIMP GetTypeInfoCount( UINT *pctinfo); STDMETHODIMP Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); }; class ConnectionEnum : public IEnumConnections { private: LONG m_cRef; // Object ref count. UINT m_iCurrent; // "Current" enum index. UINT m_cConnections; // Connection count. PCONNECTDATA m_rgConnections; // Array of connection info. LPUNKNOWN m_pUnkContainer; // Connection pt container. // // Prevent assignment. // void operator = (const ConnectionEnum&); public: ConnectionEnum( LPUNKNOWN pUnkContainer, UINT cConnection, PCONNECTDATA rgConnections); ConnectionEnum( const ConnectionEnum& refEnum); ~ConnectionEnum(void); HRESULT Initialize( UINT cConnection, PCONNECTDATA rgConnections); // // IUnknown methods. // STDMETHODIMP QueryInterface( REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef( VOID); STDMETHODIMP_(ULONG) Release( VOID); // // IEnumConnections methods. // STDMETHODIMP Next( DWORD, PCONNECTDATA, LPDWORD); STDMETHODIMP Skip( DWORD); STDMETHODIMP Reset( VOID); STDMETHODIMP Clone( PENUMCONNECTIONS *); }; class ConnectionPointEnum : public IEnumConnectionPoints { private: LONG m_cRef; // Object ref count. UINT m_iCurrent; // "Current" enum index. UINT m_cConnPts; // Connection point count. PCONNECTIONPOINT *m_rgConnPts; // Array of connection info. LPUNKNOWN m_pUnkContainer; // IUnknown of DiskQuotaController. // // Prevent assignment. // void operator = (const ConnectionPointEnum&); public: ConnectionPointEnum( LPUNKNOWN pUnkContainer, UINT cConnPts, PCONNECTIONPOINT *rgConnPts); ConnectionPointEnum( const ConnectionPointEnum& refEnum); ~ConnectionPointEnum(void); // // IUnknown methods. // STDMETHODIMP QueryInterface( REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef( VOID); STDMETHODIMP_(ULONG) Release( VOID); // // IEnumConnections methods. // STDMETHODIMP Next( DWORD, PCONNECTIONPOINT *, LPDWORD); STDMETHODIMP Skip( DWORD); STDMETHODIMP Reset( VOID); STDMETHODIMP Clone( PENUMCONNECTIONPOINTS *); }; #endif // CONNECTION_POINT_STUFF_H