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