IEnumVARIANT::Clone

This method creates a copy of the current state of enumeration.

At a Glance

Header file: Oaidl.h
Windows CE versions: 2.0 and later

Syntax

HRESULT Clone( IEnumVARIANT FAR* FAR* ppEnum );

Parameters

ppEnum

On return, pointer to the location of the clone enumerator.

Return Values

One of the values described in the following table is returned.

Value Description
S_OK Success.
E_OUTOFMEMORY Insufficient memory to complete the operation.

Remarks

Using this function, a particular point in the enumeration sequence can be recorded, and then returned to at a later time. The returned enumerator is of the same actual interface as the one that is being cloned.

There is no guarantee that exactly the same set of variants will be enumerated the second time as was enumerated the first. Although an exact duplicate is desirable, the outcome depends on the collection being enumerated. You may find that it is impractical for some collections to maintain this condition (for example, an enumeration of the files in a directory).

Example

The following code implements IEnumVariant::Clone for collections in the Lines sample file Enumvar.cpp.

STDMETHODIMP
CEnumVariant::Clone(IEnumVARIANT FAR* FAR* ppEnum)
{
   CEnumVariant FAR* penum = NULL;
   HRESULT hr;

   *ppenum = NULL;

   hr = CEnumVariant::Create(m_psa, m_cElements, &penum);
   if (FAILED(hr))
      goto error;
   penum->AddRef();
   penum->m_lCurrent = m_lCurrent;

   *ppenum = penum;
   return NOERROR;

error:
   if (penum)
      penum->Release();
   return hr;
}