/*
* IENUM0.H
*
* Definition of an IEnumRECT interface as an example of OLE
* interfaces as they appear in C and C++.
*
* Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Microsoft
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/
#ifndef _IENUM0_H_
#define _IENUM0_H_
//C++ Definition of an interface.
#ifdef __cplusplus
typedef struct IEnumRECT IEnumRECT;
typedef IEnumRECT *PENUMRECT;
//This is the interface: a struct of pure virtual functions.
struct IEnumRECT
{
STDMETHOD(QueryInterface)(REFIID, PPVOID)=0;
STDMETHOD_(ULONG,AddRef)(void)=0;
STDMETHOD_(ULONG,Release)(void)=0;
STDMETHOD(Next)(DWORD, LPRECT, LPDWORD)=0;
STDMETHOD(Skip)(DWORD)=0;
STDMETHOD(Reset)(void)=0;
STDMETHOD(Clone)(PENUMRECT *)=0;
};
#else //!__cplusplus
/*
* A C interface is explicitly a structure containing a long
* pointer to a virtual function table that we have to
* initialize explicitly.
*/
typedef struct
{
struct IEnumRECTVtbl FAR *lpVtbl;
} IEnumRECT, *PENUMRECT;
//This is just a convenient naming
typedef struct IEnumRECTVtbl IEnumRECTVtbl;
struct IEnumRECTVtbl
{
STDMETHOD(QueryInterface)(PENUMRECT, REFIID, PPVOID);
STDMETHOD_(ULONG, AddRef)(PENUMRECT);
STDMETHOD_(ULONG, Release)(PENUMRECT);
STDMETHOD(Next)(PENUMRECT, DWORD, LPRECT, LPDWORD);
STDMETHOD(Skip)(PENUMRECT, DWORD);
STDMETHOD(Reset)(PENUMRECT);
STDMETHOD(Clone)(PENUMRECT, PENUMRECT *);
};
#endif //!__cplusplus
#endif //_IENUM0_H_