Module: wine Branch: master Commit: 61f0bda129d24bdae6bec8e64f8f4fcc7203e4ff URL: http://source.winehq.org/git/wine.git/?a=commit;h=61f0bda129d24bdae6bec8e64f...
Author: Huw Davies huw@codeweavers.com Date: Thu Feb 9 12:03:04 2017 +0000
wbemdisp: Implement ISWbemObjectSet::ItemIndex.
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wbemdisp/locator.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/wbemdisp/locator.c b/dlls/wbemdisp/locator.c index fece94f..4a67942 100644 --- a/dlls/wbemdisp/locator.c +++ b/dlls/wbemdisp/locator.c @@ -538,8 +538,39 @@ static HRESULT WINAPI objectset_ItemIndex( LONG lIndex, ISWbemObject **objWbemObject ) { - FIXME( "\n" ); - return E_NOTIMPL; + struct objectset *objectset = impl_from_ISWbemObjectSet( iface ); + LONG count; + HRESULT hr; + IEnumVARIANT *enum_var; + VARIANT var; + + TRACE( "%p, %d, %p\n", objectset, lIndex, objWbemObject ); + + *objWbemObject = NULL; + hr = ISWbemObjectSet_get_Count( iface, &count ); + if (FAILED(hr)) return hr; + + if (lIndex >= count) return WBEM_E_NOT_FOUND; + + hr = ISWbemObjectSet_get__NewEnum( iface, (IUnknown **)&enum_var ); + if (FAILED(hr)) return hr; + + IEnumVARIANT_Reset( enum_var ); + hr = IEnumVARIANT_Skip( enum_var, lIndex ); + if (SUCCEEDED(hr)) + hr = IEnumVARIANT_Next( enum_var, 1, &var, NULL ); + IEnumVARIANT_Release( enum_var ); + + if (SUCCEEDED(hr)) + { + if (V_VT( &var ) == VT_DISPATCH) + hr = IDispatch_QueryInterface( V_DISPATCH( &var ), &IID_ISWbemObject, (void **)objWbemObject ); + else + hr = WBEM_E_NOT_FOUND; + VariantClear( &var ); + } + + return hr; }
static const ISWbemObjectSetVtbl objectset_vtbl =