IEnumXXX

COM enumerators implement Reset(), Next(), Skip() and Clone().

    // initialize COM libraries
    HRESULT hr = OleInitialize ((LPVOID) 0);

    // retrieve contents of clipboard
    IDataObject * pIDataObject;
    hr = OleGetClipboard (& pIDataObject);

    // retrieve a FORMATETC enumerator
    IEnumFORMATETC * pIEnumFORMATETC;
    hr = pIDataObject -> EnumFormatEtc (DATADIR_GET, & pIEnumFORMATETC);

    // enumerate all FORMATETCs supported by this data object
    FORMATETC fe;
    while ((pIEnumFORMATETC -> Next (1, & fe, (ULONG *) 0)) == S_OK)
    {
        CLIPFORMAT cfFormat = fe.cfFormat;
        if (cfFormat < CF_MAX) {
            ODS1 ("[Clipboard]\tgot format %s\n", rszClipboardNames [cfFormat]);
        }
        else {
            ODS1 ("[Clipboard]\tunknown clipboard format %d\n", cfFormat);
        }
    }

    // release enumerator object
    hr = pIEnumFORMATETC -> Release ();

References