ol32: Make enumx implementation look more like a COM interface.

Dmitry Timoshkov dmitry at baikal.ru
Fri Jun 21 01:53:10 CDT 2013


---
 dlls/ole32/enumx.c    | 10 +++++-----
 dlls/ole32/enumx.h    |  2 +-
 dlls/ole32/stg_prop.c |  4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dlls/ole32/enumx.c b/dlls/ole32/enumx.c
index 4279ca8..fedfbc7 100644
--- a/dlls/ole32/enumx.c
+++ b/dlls/ole32/enumx.c
@@ -35,7 +35,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
 
 struct tagEnumSTATPROPSETSTG_impl
 {
-    const void *vtbl;
+    IUnknown IUnknown_iface;
     LONG ref;
     struct list elements;
     struct list *current;
@@ -59,8 +59,8 @@ HRESULT WINAPI enumx_QueryInterface(
     if (IsEqualGUID(&IID_IUnknown, riid) ||
         IsEqualGUID(&This->riid, riid))
     {
-        IUnknown_AddRef(((IUnknown*)This));
-        *ppvObject = This;
+        IUnknown_AddRef(&This->IUnknown_iface);
+        *ppvObject = &This->IUnknown_iface;
         return S_OK;
     }
 
@@ -169,14 +169,14 @@ HRESULT WINAPI enumx_Clone(
  *
  * Allocate a generic enumerator
  */
-enumx_impl *enumx_allocate(REFIID riid, const void *vtbl, ULONG elem_size)
+enumx_impl *enumx_allocate(REFIID riid, const IUnknownVtbl *vtbl, ULONG elem_size)
 {
     enumx_impl *enumx;
 
     enumx = HeapAlloc(GetProcessHeap(), 0, sizeof *enumx);
     if (enumx)
     {
-        enumx->vtbl = vtbl;
+        enumx->IUnknown_iface.lpVtbl = vtbl;
         enumx->ref = 1;
         enumx->current = NULL;
         enumx->elem_size = elem_size;
diff --git a/dlls/ole32/enumx.h b/dlls/ole32/enumx.h
index da76e13..3043b58 100644
--- a/dlls/ole32/enumx.h
+++ b/dlls/ole32/enumx.h
@@ -28,7 +28,7 @@ extern HRESULT WINAPI enumx_Next(enumx_impl *, ULONG, void *, ULONG *) DECLSPEC_
 extern HRESULT WINAPI enumx_Skip(enumx_impl *, ULONG) DECLSPEC_HIDDEN;
 extern HRESULT WINAPI enumx_Reset(enumx_impl *) DECLSPEC_HIDDEN;
 extern HRESULT WINAPI enumx_Clone(enumx_impl *, enumx_impl **) DECLSPEC_HIDDEN;
-extern enumx_impl *enumx_allocate(REFIID, const void *, ULONG) DECLSPEC_HIDDEN;
+extern enumx_impl *enumx_allocate(REFIID, const IUnknownVtbl *, ULONG) DECLSPEC_HIDDEN;
 extern void *enumx_add_element(enumx_impl *, const void *) DECLSPEC_HIDDEN;
 
 #endif
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c
index c2626cf..c6214f8 100644
--- a/dlls/ole32/stg_prop.c
+++ b/dlls/ole32/stg_prop.c
@@ -2380,7 +2380,7 @@ static HRESULT create_EnumSTATPROPSETSTG(
     TRACE("%p %p\n", This, ppenum);
 
     enumx = enumx_allocate(&IID_IEnumSTATPROPSETSTG,
-                           &IEnumSTATPROPSETSTG_Vtbl,
+                           (const IUnknownVtbl *)&IEnumSTATPROPSETSTG_Vtbl,
                            sizeof (STATPROPSETSTG));
 
     /* add all the property set elements into a list */
@@ -2499,7 +2499,7 @@ static HRESULT create_EnumSTATPROPSTG(
     TRACE("%p %p\n", This, ppenum);
 
     enumx = enumx_allocate(&IID_IEnumSTATPROPSTG,
-                           &IEnumSTATPROPSTG_Vtbl,
+                           (const IUnknownVtbl *)&IEnumSTATPROPSTG_Vtbl,
                            sizeof (STATPROPSTG));
 
     dictionary_enumerate(This->propid_to_prop, prop_enum_stat, enumx);
-- 
1.8.3.1




More information about the wine-patches mailing list