Huw Davies : wbemdisp: Implement ISWbemObjectSet::ItemIndex.
Alexandre Julliard
julliard at winehq.org
Thu Feb 9 15:54:27 CST 2017
Module: wine
Branch: master
Commit: 61f0bda129d24bdae6bec8e64f8f4fcc7203e4ff
URL: http://source.winehq.org/git/wine.git/?a=commit;h=61f0bda129d24bdae6bec8e64f8f4fcc7203e4ff
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Feb 9 12:03:04 2017 +0000
wbemdisp: Implement ISWbemObjectSet::ItemIndex.
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 =
More information about the wine-cvs
mailing list