static HRESULT selection_next(IUnknown *iface) { IXMLDOMNode *node; HRESULT hr = IXMLDOMSelection_nextNode((IXMLDOMSelection*)iface, &node); if (hr == S_OK) IXMLDOMNode_Release(node); return hr; }
static HRESULT WINAPI enumvariant_Next( IEnumVARIANT *iface, ULONG celt, VARIANT *var, ULONG *fetched) { enumvariant *This = impl_from_IEnumVARIANT( iface ); IXMLDOMNode *node; ULONG ret_count = 0; TRACE("(%p)->(%u %p %p)\n", This, celt, var, fetched); if (fetched) *fetched = 0; if (celt && !var) return E_INVALIDARG; for (; celt > 0; celt--, var++, This->pos++) { IDispatch *disp = NULL; HRESULT hr; node = NULL; hr = IXMLDOMSelection_get_item(This->selection, This->pos, &node); if (hr != S_OK) break; IXMLDOMNode_QueryInterface(node, &IID_IDispatch, (void**)&disp); IXMLDOMNode_Release(node); V_VT(var) = VT_DISPATCH; V_DISPATCH(var) = disp; ret_count++; } if (fetched) (*fetched)++; /* we need to advance one step more for some reason */ if (ret_count) IXMLDOMSelection_nextNode(This->selection, &node); return celt == 0 ? S_OK : S_FALSE; }