wbemdisp: Implement ISWbemObjectSet::ItemIndex.
Huw Davies
huw at codeweavers.com
Thu Feb 9 06:03:04 CST 2017
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
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 =
--
2.10.2
More information about the wine-patches
mailing list