STDMETHODIMP Next(ULONG celt,VARIANT __RPC_FAR *rgVar, ULONG __RPC_FAR *pCeltFetched) { HRESULT hr = S_FALSE; if ( pCeltFetched ) *pCeltFetched = 0; int i = 0; while ( m_lCurrent<m_lMax && celt ) { CComVariant varCelt(++m_lCurrent); VariantInit(&rgVar[i]); IGame* pGame; hr = m_pGames->get_Item(&varCelt, &pGame); if ( FAILED(hr) ) return hr; rgVar[i].vt = VT_DISPATCH; rgVar[i].ppdispVal = new IDispatch*; hr = pGame->QueryInterface(IID_IDispatch, (void**) &rgVar[i].pdispVal); pGame->Release(); if ( FAILED(hr) ) return hr; celt--; if ( pCeltFetched ) (*pCeltFetched)++; i++; } return celt ? S_FALSE : S_OK; }