Listing 3: SearchCollection::get__NewEnum().
STDMETHODIMP SearchCollection::get__NewEnum(LPUNKNOWN *ppenum) { HRESULT hr; if(NULL == ppenum) { hr = E_POINTER; } else { *ppenum = NULL; EnumEntry *pee = new CComObject<EnumEntry>(); if(NULL == pee) { hr = E_OUTOFMEMORY; } else { hr = S_OK; if( NULL == m_info.hSrch && !m_info.bEmpty) { // This collection has already been used to spawn a // search, so we need to start another one. recls_rc_t rc = Recls_Search( . . . ); if(rc != RECLS_RC_NO_MORE_DATA) { m_info.bEmpty = true; } else if(RECLS_FAILED(rc)) { set_error_info_from_recls_rc_t(rc); delete pee; hr = E_FAIL; } } if(SUCCEEDED(hr)) { pee->SetVoid(&m_info); ATLASSERT(NULL == m_info.hSrch); *ppenum = static_cast<IEnumVARIANT*>(pee); (*ppenum)->AddRef(); } } } return hr; }