# IEnumXXXX

To allow you to enumerate the number of items of a given type that an object maintains, OLE provides a set of enumeration interfaces, one for each type of item.

To use these interfaces, the client asks an object that maintains a collection of items to create an enumerator object. The interface on the enumeration object is one of the enumeration interfaces, all of which have a name of the form IEnum Item_name. The only difference between enumeration interfaces is what they enumerate &emdash; there must be a separate enumeration interface for each type of item enumerated. All have the same set of methods, and are used in the same way. For example, by repeatedly calling the Next method, the client gets successive pointers to each item in the collection.

The following table lists the set of enumeration interfaces that OLE defines, and the items enumerated.

Enumeration Interface Name | Item Enumerated
IEnumFORMATETC | An array of FORMATETC structures.
IEnumMoniker | The components of a moniker, or the monikers in a table.
IEnumOLEVERB | The different verbs available for an object, in order of ascending verb number.
IEnumSTATDATA | An array of STATDATA structures which contain advisory connection information for a data object.
IEnumSTATSTG | An array of STATSTG structures, which contain statistical information about a storage, stream, or LockBytes object
IEnumString | Strings
IEnumUnknown | Enumerates IUnknown interface pointers.
IEnumVARIANT | A collection of variants. It allows clients to enumerate heterogeneous collections of objects and intrinsic types when the clients cannot or do not know the specific type(s) of elements in the collection.

Methods in Vtable Order

IUnknown Methods | Description
QueryInterface | Returns pointers to supported interfaces.
AddRef | Increments reference count.
Release | Decrements reference count.

IEnumXXXX Methods | Description
Next | Retrieves a specified number of items in the enumeration sequence.
Skip | Skips over a specified number of items in the enumeration sequence.
Reset | Resets the enumeration sequence to the beginning.
Clone | Creates another enumerator that contains the same enumeration state as the current one.