From b0c61294baf84fb4b6d683e172337d4fe3b37f52 Mon Sep 17 00:00:00 2001
From: Francois Gouget <fgouget@psn.net>
Date: Thu, 18 Feb 1999 13:26:22 +0000
Subject: [PATCH] Modified so that they do not use the VTABLE_FUNC macros that
 performed casts of all methods put in the jump table. I find it too risky to
 use such macros because nothing guarantees that you actually put the right
 method at the right place or that the prototype is right.

---
 dlls/shell32/shelllink.c |  20 ++-
 ole/bindctx.c            | 152 ++++++++++++----------
 ole/filemoniker.c        | 247 ++++++++++++++++++++---------------
 ole/itemmoniker.c        | 251 ++++++++++++++++++++----------------
 ole/stg_stream.c         |  84 ++++++------
 ole/storage32.c          | 272 ++++++++++++++++++++++-----------------
 ole/storage32.h          |  92 ++++++-------
 7 files changed, 619 insertions(+), 499 deletions(-)

diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index ae25a2b5a68..b77cc664f47 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -48,7 +48,7 @@ LPPERSISTFILE IPersistFile_Constructor(void)
  *  IPersistFile_QueryInterface
  */
 static HRESULT WINAPI IPersistFile_fnQueryInterface(
-  LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
+  IPersistFile* iface, REFIID riid, LPVOID *ppvObj)
 {
 	ICOM_THIS(IPersistFileImpl,iface);
 	char    xriid[50];
@@ -75,7 +75,7 @@ static HRESULT WINAPI IPersistFile_fnQueryInterface(
 /******************************************************************************
  * IPersistFile_AddRef
  */
-static ULONG WINAPI IPersistFile_fnAddRef(LPUNKNOWN iface)
+static ULONG WINAPI IPersistFile_fnAddRef(IPersistFile* iface)
 {
 	ICOM_THIS(IPersistFileImpl,iface);
 	TRACE(shell,"(%p)->(count=%lu)\n",This,This->ref);
@@ -86,7 +86,7 @@ static ULONG WINAPI IPersistFile_fnAddRef(LPUNKNOWN iface)
 /******************************************************************************
  * IPersistFile_Release
  */
-static ULONG WINAPI IPersistFile_fnRelease(LPUNKNOWN iface)
+static ULONG WINAPI IPersistFile_fnRelease(IPersistFile* iface)
 {
 	ICOM_THIS(IPersistFileImpl,iface);
 	TRACE(shell,"(%p)->(count=%lu)\n",This,This->ref);
@@ -101,7 +101,7 @@ static ULONG WINAPI IPersistFile_fnRelease(LPUNKNOWN iface)
 	return This->ref;
 }
 
-static HRESULT WINAPI IPersistFile_fnGetClassID(const IPersist* iface, CLSID *pClassID)
+static HRESULT WINAPI IPersistFile_fnGetClassID(const IPersistFile* iface, CLSID *pClassID)
 {
 	ICOM_CTHIS(IPersistFile,iface);
 	FIXME(shell,"(%p)\n",This);
@@ -140,14 +140,10 @@ static HRESULT WINAPI IPersistFile_fnGetCurFile(const IPersistFile* iface, LPOLE
   
 static struct ICOM_VTABLE(IPersistFile) pfvt = 
 {
-    {
-        {
-            IPersistFile_fnQueryInterface,
-            IPersistFile_fnAddRef,
-            IPersistFile_fnRelease
-        },
-        IPersistFile_fnGetClassID
-    },
+    IPersistFile_fnQueryInterface,
+    IPersistFile_fnAddRef,
+    IPersistFile_fnRelease,
+    IPersistFile_fnGetClassID,
     IPersistFile_fnIsDirty,
     IPersistFile_fnLoad,
     IPersistFile_fnSave,
diff --git a/ole/bindctx.c b/ole/bindctx.c
index 2ef9bf34751..862a687a0d3 100644
--- a/ole/bindctx.c
+++ b/ole/bindctx.c
@@ -24,50 +24,50 @@ typedef struct BindCtxImpl{
 } BindCtxImpl;
 
 
-HRESULT WINAPI BindCtxImpl_QueryInterface(BindCtxImpl* This,REFIID riid,void** ppvObject);
-ULONG   WINAPI BindCtxImpl_AddRef(BindCtxImpl* This);
-ULONG   WINAPI BindCtxImpl_Release(BindCtxImpl* This);
-HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This);
-HRESULT WINAPI BindCtxImpl_destroy(BindCtxImpl* This);
-HRESULT WINAPI BindCtxImpl_RegisterObjectBound(BindCtxImpl* This,IUnknown* punk);
-HRESULT WINAPI BindCtxImpl_RevokeObjectBound(BindCtxImpl* This, IUnknown* punk);
-HRESULT WINAPI BindCtxImpl_ReleaseObjects(BindCtxImpl* This);
-HRESULT WINAPI BindCtxImpl_SetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindopts);
-HRESULT WINAPI BindCtxImpl_GetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindopts);
-HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(BindCtxImpl* This,IRunningObjectTable** pprot);
-HRESULT WINAPI BindCtxImpl_RegisterObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey, IUnknown* punk);
-HRESULT WINAPI BindCtxImpl_GetObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey, IUnknown* punk);
-HRESULT WINAPI BindCtxImpl_EnumObjectParam(BindCtxImpl* This,IEnumString** ppenum);
-HRESULT WINAPI BindCtxImpl_RevokeObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey);
+HRESULT WINAPI BindCtxImpl_QueryInterface(IBindCtx* iface,REFIID riid,void** ppvObject);
+ULONG   WINAPI BindCtxImpl_AddRef(IBindCtx* iface);
+ULONG   WINAPI BindCtxImpl_Release(IBindCtx* iface);
+HRESULT WINAPI BindCtxImpl_RegisterObjectBound(IBindCtx* iface,IUnknown* punk);
+HRESULT WINAPI BindCtxImpl_RevokeObjectBound(IBindCtx* iface, IUnknown* punk);
+HRESULT WINAPI BindCtxImpl_ReleaseObjects(IBindCtx* iface);
+HRESULT WINAPI BindCtxImpl_SetBindOptions(IBindCtx* iface,LPBIND_OPTS2 pbindopts);
+HRESULT WINAPI BindCtxImpl_GetBindOptions(IBindCtx* iface,LPBIND_OPTS2 pbindopts);
+HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(IBindCtx* iface,IRunningObjectTable** pprot);
+HRESULT WINAPI BindCtxImpl_RegisterObjectParam(IBindCtx* iface,LPOLESTR32 pszkey, IUnknown* punk);
+HRESULT WINAPI BindCtxImpl_GetObjectParam(IBindCtx* iface,LPOLESTR32 pszkey, IUnknown* punk);
+HRESULT WINAPI BindCtxImpl_EnumObjectParam(IBindCtx* iface,IEnumString** ppenum);
+HRESULT WINAPI BindCtxImpl_RevokeObjectParam(IBindCtx* iface,LPOLESTR32 pszkey);
+
 HRESULT WINAPI CreateBindCtx16(DWORD reserved, LPBC * ppbc);
 HRESULT WINAPI CreateBindCtx32(DWORD reserved, LPBC * ppbc);
 
-#define VTABLE_FUNC(a) (void*)(a)
+HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This);
+HRESULT WINAPI BindCtxImpl_Destroy(BindCtxImpl* This);
+
 // Virtual function table for the BindCtx class.
 static ICOM_VTABLE(IBindCtx) VT_BindCtxImpl =
-{
     {
-      VTABLE_FUNC(BindCtxImpl_QueryInterface),
-      VTABLE_FUNC(BindCtxImpl_AddRef),
-      VTABLE_FUNC(BindCtxImpl_Release)
-    },
-    VTABLE_FUNC(BindCtxImpl_RegisterObjectBound),
-    VTABLE_FUNC(BindCtxImpl_RevokeObjectBound),
-    VTABLE_FUNC(BindCtxImpl_ReleaseObjects),
-    VTABLE_FUNC(BindCtxImpl_SetBindOptions),
-    VTABLE_FUNC(BindCtxImpl_GetBindOptions),
-    VTABLE_FUNC(BindCtxImpl_GetRunningObjectTable),
-    VTABLE_FUNC(BindCtxImpl_RegisterObjectParam),
-    VTABLE_FUNC(BindCtxImpl_GetObjectParam),
-    VTABLE_FUNC(BindCtxImpl_EnumObjectParam),
-    VTABLE_FUNC(BindCtxImpl_RevokeObjectParam)
+    BindCtxImpl_QueryInterface,
+    BindCtxImpl_AddRef,
+    BindCtxImpl_Release,
+    BindCtxImpl_RegisterObjectBound,
+    BindCtxImpl_RevokeObjectBound,
+    BindCtxImpl_ReleaseObjects,
+    BindCtxImpl_SetBindOptions,
+    BindCtxImpl_GetBindOptions,
+    BindCtxImpl_GetRunningObjectTable,
+    BindCtxImpl_RegisterObjectParam,
+    BindCtxImpl_GetObjectParam,
+    BindCtxImpl_EnumObjectParam,
+    BindCtxImpl_RevokeObjectParam
 };
 
 /*******************************************************************************
  *        BindCtx_QueryInterface
  *******************************************************************************/
-HRESULT WINAPI BindCtxImpl_QueryInterface(BindCtxImpl* This,REFIID riid,void** ppvObject){
-
+HRESULT WINAPI BindCtxImpl_QueryInterface(IBindCtx* iface,REFIID riid,void** ppvObject)
+{
+  ICOM_THIS(BindCtxImpl,iface);
   TRACE(ole,"(%p,%p,%p)\n",This,riid,ppvObject);
   // Perform a sanity check on the parameters.
   if ( (This==0) || (ppvObject==0) )    return E_INVALIDARG;
@@ -86,7 +86,7 @@ HRESULT WINAPI BindCtxImpl_QueryInterface(BindCtxImpl* This,REFIID riid,void** p
   if ((*ppvObject)==0)        return E_NOINTERFACE;
   
    // Query Interface always increases the reference count by one when it is successful
-  BindCtxImpl_AddRef(This);
+  BindCtxImpl_AddRef(iface);
 
   return S_OK;
 }
@@ -94,8 +94,9 @@ HRESULT WINAPI BindCtxImpl_QueryInterface(BindCtxImpl* This,REFIID riid,void** p
 /******************************************************************************
  *       BindCtx_ _AddRef
  ******************************************************************************/
-ULONG WINAPI BindCtxImpl_AddRef(BindCtxImpl* This){
-
+ULONG WINAPI BindCtxImpl_AddRef(IBindCtx* iface)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     TRACE(ole,"(%p)\n",This);
 
     return ++(This->ref);
@@ -104,14 +105,15 @@ ULONG WINAPI BindCtxImpl_AddRef(BindCtxImpl* This){
 /******************************************************************************
  *        BindCtx_Release
  ******************************************************************************/
-ULONG WINAPI BindCtxImpl_Release(BindCtxImpl* This){
-
+ULONG WINAPI BindCtxImpl_Release(IBindCtx* iface)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     TRACE(ole,"(%p)\n",This);
 
     This->ref--;
 
     if (This->ref==0){
-        BindCtxImpl_destroy(This);
+        BindCtxImpl_Destroy(This);
         return 0;
     }
     return This->ref;;
@@ -119,10 +121,10 @@ ULONG WINAPI BindCtxImpl_Release(BindCtxImpl* This){
 
 
 /******************************************************************************
- *         BindCtx_Constructor
+ *         BindCtx_Construct
  *******************************************************************************/
-HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This){
-
+HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This)
+{
     FIXME(ole,"(%p),stub!\n",This);
 
     memset(This, 0, sizeof(BindCtxImpl));
@@ -134,10 +136,10 @@ HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This){
 }
 
 /******************************************************************************
- *        BindCtx_destructor
+ *        BindCtx_Destroy
  *******************************************************************************/
-HRESULT WINAPI BindCtxImpl_destroy(BindCtxImpl* This){
-
+HRESULT WINAPI BindCtxImpl_Destroy(BindCtxImpl* This)
+{
     FIXME(ole,"(%p),stub!\n",This);
 
     SEGPTR_FREE(This);
@@ -149,8 +151,9 @@ HRESULT WINAPI BindCtxImpl_destroy(BindCtxImpl* This){
 /******************************************************************************
  *        BindCtx_RegisterObjectBound
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_RegisterObjectBound(BindCtxImpl* This,IUnknown* punk){
-
+HRESULT WINAPI BindCtxImpl_RegisterObjectBound(IBindCtx* iface,IUnknown* punk)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,punk);
 
     return E_NOTIMPL;
@@ -159,8 +162,9 @@ HRESULT WINAPI BindCtxImpl_RegisterObjectBound(BindCtxImpl* This,IUnknown* punk)
 /******************************************************************************
  *        BindCtx_RevokeObjectBound
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_RevokeObjectBound(BindCtxImpl* This, IUnknown* punk){
-
+HRESULT WINAPI BindCtxImpl_RevokeObjectBound(IBindCtx* iface, IUnknown* punk)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,punk);
 
     return E_NOTIMPL;
@@ -169,8 +173,9 @@ HRESULT WINAPI BindCtxImpl_RevokeObjectBound(BindCtxImpl* This, IUnknown* punk){
 /******************************************************************************
  *        BindCtx_ReleaseObjects
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_ReleaseObjects(BindCtxImpl* This){
-
+HRESULT WINAPI BindCtxImpl_ReleaseObjects(IBindCtx* iface)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p),stub!\n",This);
 
     return E_NOTIMPL;
@@ -179,8 +184,9 @@ HRESULT WINAPI BindCtxImpl_ReleaseObjects(BindCtxImpl* This){
 /******************************************************************************
  *        BindCtx_SetBindOptions
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_SetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindopts){
-
+HRESULT WINAPI BindCtxImpl_SetBindOptions(IBindCtx* iface,LPBIND_OPTS2 pbindopts)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,pbindopts);
 
     return E_NOTIMPL;
@@ -189,8 +195,9 @@ HRESULT WINAPI BindCtxImpl_SetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindop
 /******************************************************************************
  *        BindCtx_GetBindOptions
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_GetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindopts){
-
+HRESULT WINAPI BindCtxImpl_GetBindOptions(IBindCtx* iface,LPBIND_OPTS2 pbindopts)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,pbindopts);
 
     return E_NOTIMPL;
@@ -199,8 +206,9 @@ HRESULT WINAPI BindCtxImpl_GetBindOptions(BindCtxImpl* This,LPBIND_OPTS2 pbindop
 /******************************************************************************
  *        BindCtx_GetRunningObjectTable
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(BindCtxImpl* This,IRunningObjectTable** pprot){
-
+HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(IBindCtx* iface,IRunningObjectTable** pprot)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,pprot);
 
     return E_NOTIMPL;
@@ -209,8 +217,9 @@ HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(BindCtxImpl* This,IRunningObjec
 /******************************************************************************
  *        BindCtx_RegisterObjectParam
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_RegisterObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey, IUnknown* punk){
-
+HRESULT WINAPI BindCtxImpl_RegisterObjectParam(IBindCtx* iface,LPOLESTR32 pszkey, IUnknown* punk)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pszkey,punk);
 
     return E_NOTIMPL;
@@ -219,8 +228,9 @@ HRESULT WINAPI BindCtxImpl_RegisterObjectParam(BindCtxImpl* This,LPOLESTR32 pszk
 /******************************************************************************
  *        BindCtx_GetObjectParam
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_GetObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey, IUnknown* punk){
-
+HRESULT WINAPI BindCtxImpl_GetObjectParam(IBindCtx* iface,LPOLESTR32 pszkey, IUnknown* punk)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pszkey,punk);
 
     return E_NOTIMPL;
@@ -229,8 +239,9 @@ HRESULT WINAPI BindCtxImpl_GetObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey, I
 /******************************************************************************
  *        BindCtx_EnumObjectParam
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_EnumObjectParam(BindCtxImpl* This,IEnumString** ppenum){
-
+HRESULT WINAPI BindCtxImpl_EnumObjectParam(IBindCtx* iface,IEnumString** ppenum)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,ppenum);
 
     return E_NOTIMPL;
@@ -239,8 +250,9 @@ HRESULT WINAPI BindCtxImpl_EnumObjectParam(BindCtxImpl* This,IEnumString** ppenu
 /******************************************************************************
  *        BindCtx_RevokeObjectParam
  ******************************************************************************/
-HRESULT WINAPI BindCtxImpl_RevokeObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey){
-
+HRESULT WINAPI BindCtxImpl_RevokeObjectParam(IBindCtx* iface,LPOLESTR32 pszkey)
+{
+    ICOM_THIS(BindCtxImpl,iface);
     FIXME(ole,"(%p,%p),stub!\n",This,pszkey);
 
     return E_NOTIMPL;
@@ -250,8 +262,8 @@ HRESULT WINAPI BindCtxImpl_RevokeObjectParam(BindCtxImpl* This,LPOLESTR32 pszkey
 /******************************************************************************
  *        CreateBindCtx16
  ******************************************************************************/
-HRESULT WINAPI CreateBindCtx16(DWORD reserved, LPBC * ppbc){
-
+HRESULT WINAPI CreateBindCtx16(DWORD reserved, LPBC * ppbc)
+{
     FIXME(ole,"(%ld,%p),stub!\n",reserved,ppbc);
 
     return E_NOTIMPL;
@@ -260,8 +272,8 @@ HRESULT WINAPI CreateBindCtx16(DWORD reserved, LPBC * ppbc){
 /******************************************************************************
  *        CreateBindCtx32
  ******************************************************************************/
-HRESULT WINAPI CreateBindCtx32(DWORD reserved, LPBC * ppbc){
-
+HRESULT WINAPI CreateBindCtx32(DWORD reserved, LPBC * ppbc)
+{
     BindCtxImpl* newBindCtx = 0;
     HRESULT        hr = S_OK;
 
@@ -277,7 +289,7 @@ HRESULT WINAPI CreateBindCtx32(DWORD reserved, LPBC * ppbc){
     if (FAILED(hr))
         return hr;
 
-    hr = BindCtxImpl_QueryInterface(newBindCtx,&IID_IBindCtx,(void**)ppbc);
+    hr = BindCtxImpl_QueryInterface((IBindCtx*)newBindCtx,&IID_IBindCtx,(void**)ppbc);
 
     return hr;
 }
diff --git a/ole/filemoniker.c b/ole/filemoniker.c
index fae18334358..a3252deacae 100644
--- a/ole/filemoniker.c
+++ b/ole/filemoniker.c
@@ -23,75 +23,67 @@ typedef struct FileMonikerImpl{
 
 } FileMonikerImpl;
 
-HRESULT WINAPI FileMonikerImpl_QueryInterface(FileMonikerImpl* This,REFIID riid,void** ppvObject);
-ULONG   WINAPI FileMonikerImpl_AddRef(FileMonikerImpl* This);
-ULONG   WINAPI FileMonikerImpl_Release(FileMonikerImpl* This);
-HRESULT WINAPI FileMonikerImpl_GetClassID(FileMonikerImpl* This, CLSID *pClassID);
-HRESULT WINAPI FileMonikerImpl_IsDirty(FileMonikerImpl* This);
-HRESULT WINAPI FileMonikerImpl_Load(FileMonikerImpl* This,LPCOLESTR32 pszFileName,DWORD dwMode);
-HRESULT WINAPI FileMonikerImpl_Save(FileMonikerImpl* This,LPCOLESTR32 pszFileName,BOOL32 fRemember);
-HRESULT WINAPI FileMonikerImpl_GetSizeMax(FileMonikerImpl* This,LPOLESTR32 *ppszFileName);
-HRESULT WINAPI FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR32 lpszPathName);
-HRESULT WINAPI FileMonikerImpl_destroy(FileMonikerImpl* This);
-HRESULT WINAPI FileMonikerImpl_BindToObject(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
-HRESULT WINAPI FileMonikerImpl_BindToStorage(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
-HRESULT WINAPI FileMonikerImpl_Reduce(FileMonikerImpl* This,IBindCtx* pbc, DWORD dwReduceHowFar,IMoniker** ppmkToLeft, IMoniker** ppmkReduced);
-HRESULT WINAPI FileMonikerImpl_ComposeWith(FileMonikerImpl* This,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric, IMoniker** ppmkComposite);
-HRESULT WINAPI FileMonikerImpl_Enum(FileMonikerImpl* This,BOOL32 fForward, IEnumMoniker** ppenumMoniker);
-HRESULT WINAPI FileMonikerImpl_IsEqual(FileMonikerImpl* This,IMoniker* pmkOtherMoniker);
-HRESULT WINAPI FileMonikerImpl_Hash(FileMonikerImpl* This,DWORD* pdwHash);
-HRESULT WINAPI FileMonikerImpl_IsRunning(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning);
-HRESULT WINAPI FileMonikerImpl_GetTimeOfLastChange(FileMonikerImpl* This, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pFileTime);
-HRESULT WINAPI FileMonikerImpl_Inverse(FileMonikerImpl* This,IMoniker** ppmk);
-HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(FileMonikerImpl* This,IMoniker* pmkOther, IMoniker** ppmkPrefix);
-HRESULT WINAPI FileMonikerImpl_RelativePathTo(FileMonikerImpl* This,IMoniker* pmOther, IMoniker** ppmkRelPath);
-HRESULT WINAPI FileMonikerImpl_GetDisplayName(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 *ppszDisplayName);
-HRESULT WINAPI FileMonikerImpl_ParseDisplayName(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut);
-HRESULT WINAPI FileMonikerImpl_IsSystemMoniker(FileMonikerImpl* This,DWORD* pwdMksys);
-HRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName,LPMONIKER * ppmk);
-HRESULT WINAPI CreateFileMoniker32( LPCOLESTR32 lpszPathName, LPMONIKER * ppmk);
-
-#define VTABLE_FUNC(a) (void*)(a)
+static HRESULT WINAPI FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject);
+static ULONG   WINAPI FileMonikerImpl_AddRef(IMoniker* iface);
+static ULONG   WINAPI FileMonikerImpl_Release(IMoniker* iface);
+static HRESULT WINAPI FileMonikerImpl_GetClassID(const IMoniker* iface, CLSID *pClassID);
+static HRESULT WINAPI FileMonikerImpl_IsDirty(IMoniker* iface);
+static HRESULT WINAPI FileMonikerImpl_Load(IMoniker* iface, IStream32* pStm);
+static HRESULT WINAPI FileMonikerImpl_Save(IMoniker* iface, IStream32* pStm, BOOL32 fClearDirty);
+static HRESULT WINAPI FileMonikerImpl_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize);
+static HRESULT WINAPI FileMonikerImpl_BindToObject(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
+static HRESULT WINAPI FileMonikerImpl_BindToStorage(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
+static HRESULT WINAPI FileMonikerImpl_Reduce(IMoniker* iface,IBindCtx* pbc, DWORD dwReduceHowFar,IMoniker** ppmkToLeft, IMoniker** ppmkReduced);
+static HRESULT WINAPI FileMonikerImpl_ComposeWith(IMoniker* iface,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric, IMoniker** ppmkComposite);
+static HRESULT WINAPI FileMonikerImpl_Enum(IMoniker* iface,BOOL32 fForward, IEnumMoniker** ppenumMoniker);
+static HRESULT WINAPI FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker);
+static HRESULT WINAPI FileMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash);
+static HRESULT WINAPI FileMonikerImpl_IsRunning(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning);
+static HRESULT WINAPI FileMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pFileTime);
+static HRESULT WINAPI FileMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk);
+static HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther, IMoniker** ppmkPrefix);
+static HRESULT WINAPI FileMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath);
+static HRESULT WINAPI FileMonikerImpl_GetDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 *ppszDisplayName);
+static HRESULT WINAPI FileMonikerImpl_ParseDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut);
+static HRESULT WINAPI FileMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys);
+
+static HRESULT WINAPI FileMonikerImpl_Construct(FileMonikerImpl* iface, LPCOLESTR32 lpszPathName);
+static HRESULT WINAPI FileMonikerImpl_Destroy(FileMonikerImpl* iface);
 
 // Virtual function table for the FileMonikerImpl class.
 static ICOM_VTABLE(IMoniker) VT_FileMonikerImpl =
 {
-  {
-   {
-    {
-      VTABLE_FUNC(FileMonikerImpl_QueryInterface),
-      VTABLE_FUNC(FileMonikerImpl_AddRef),
-      VTABLE_FUNC(FileMonikerImpl_Release)
-    },
-    VTABLE_FUNC(FileMonikerImpl_GetClassID)
-   },
-   VTABLE_FUNC(FileMonikerImpl_IsDirty),
-   VTABLE_FUNC(FileMonikerImpl_Load),
-   VTABLE_FUNC(FileMonikerImpl_Save),
-   VTABLE_FUNC(FileMonikerImpl_GetSizeMax)
-  },
-  VTABLE_FUNC(FileMonikerImpl_BindToObject),
-  VTABLE_FUNC(FileMonikerImpl_BindToStorage),
-  VTABLE_FUNC(FileMonikerImpl_Reduce),
-  VTABLE_FUNC(FileMonikerImpl_ComposeWith),
-  VTABLE_FUNC(FileMonikerImpl_Enum),
-  VTABLE_FUNC(FileMonikerImpl_IsEqual),
-  VTABLE_FUNC(FileMonikerImpl_Hash),
-  VTABLE_FUNC(FileMonikerImpl_IsRunning),
-  VTABLE_FUNC(FileMonikerImpl_GetTimeOfLastChange),
-  VTABLE_FUNC(FileMonikerImpl_Inverse),
-  VTABLE_FUNC(FileMonikerImpl_CommonPrefixWith),
-  VTABLE_FUNC(FileMonikerImpl_RelativePathTo),
-  VTABLE_FUNC(FileMonikerImpl_GetDisplayName),
-  VTABLE_FUNC(FileMonikerImpl_ParseDisplayName),
-  VTABLE_FUNC(FileMonikerImpl_IsSystemMoniker)
+    FileMonikerImpl_QueryInterface,
+    FileMonikerImpl_AddRef,
+    FileMonikerImpl_Release,
+    FileMonikerImpl_GetClassID,
+    FileMonikerImpl_IsDirty,
+    FileMonikerImpl_Load,
+    FileMonikerImpl_Save,
+    FileMonikerImpl_GetSizeMax,
+    FileMonikerImpl_BindToObject,
+    FileMonikerImpl_BindToStorage,
+    FileMonikerImpl_Reduce,
+    FileMonikerImpl_ComposeWith,
+    FileMonikerImpl_Enum,
+    FileMonikerImpl_IsEqual,
+    FileMonikerImpl_Hash,
+    FileMonikerImpl_IsRunning,
+    FileMonikerImpl_GetTimeOfLastChange,
+    FileMonikerImpl_Inverse,
+    FileMonikerImpl_CommonPrefixWith,
+    FileMonikerImpl_RelativePathTo,
+    FileMonikerImpl_GetDisplayName,
+    FileMonikerImpl_ParseDisplayName,
+    FileMonikerImpl_IsSystemMoniker
 };
 
 /*******************************************************************************
  *        FileMoniker_QueryInterface
  *******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_QueryInterface(FileMonikerImpl* This,REFIID riid,void** ppvObject){
-
+HRESULT WINAPI FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
+{
+  FileMonikerImpl* This=(FileMonikerImpl*)iface;
   TRACE(ole,"(%p,%p,%p)\n",This,riid,ppvObject);
 
   // Perform a sanity check on the parameters.
@@ -117,7 +109,7 @@ HRESULT WINAPI FileMonikerImpl_QueryInterface(FileMonikerImpl* This,REFIID riid,
   if ((*ppvObject)==0)        return E_NOINTERFACE;
   
    // Query Interface always increases the reference count by one when it is successful
-  FileMonikerImpl_AddRef(This);
+  FileMonikerImpl_AddRef(iface);
 
   return S_OK;;
 }
@@ -125,7 +117,9 @@ HRESULT WINAPI FileMonikerImpl_QueryInterface(FileMonikerImpl* This,REFIID riid,
 /******************************************************************************
  *        FileMoniker_AddRef
  ******************************************************************************/
-ULONG WINAPI FileMonikerImpl_AddRef(FileMonikerImpl* This){
+ULONG WINAPI FileMonikerImpl_AddRef(IMoniker* iface)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     TRACE(ole,"(%p)\n",This);
 
@@ -135,14 +129,16 @@ ULONG WINAPI FileMonikerImpl_AddRef(FileMonikerImpl* This){
 /******************************************************************************
  *        FileMoniker_Release
  ******************************************************************************/
-ULONG WINAPI FileMonikerImpl_Release(FileMonikerImpl* This){
+ULONG WINAPI FileMonikerImpl_Release(IMoniker* iface)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     TRACE(ole,"(%p)\n",This);
 
     This->ref--;
 
     if (This->ref==0){
-        FileMonikerImpl_destroy(This);
+        FileMonikerImpl_Destroy(This);
         return 0;
     }
     return This->ref;;
@@ -151,7 +147,9 @@ ULONG WINAPI FileMonikerImpl_Release(FileMonikerImpl* This){
 /******************************************************************************
  *        FileMoniker_GetClassID
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_GetClassID(FileMonikerImpl* This, CLSID *pClassID){//Pointer to CLSID of object
+HRESULT WINAPI FileMonikerImpl_GetClassID(const IMoniker* iface, CLSID *pClassID)//Pointer to CLSID of object
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pClassID);
 
@@ -161,8 +159,10 @@ HRESULT WINAPI FileMonikerImpl_GetClassID(FileMonikerImpl* This, CLSID *pClassID
 /******************************************************************************
  *        FileMoniker_IsDirty
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_IsDirty(FileMonikerImpl* This)
+HRESULT WINAPI FileMonikerImpl_IsDirty(IMoniker* iface)
 {
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
+
     FIXME(ole,"(%p),stub!\n",This);
 
     return E_NOTIMPL;
@@ -172,24 +172,27 @@ HRESULT WINAPI FileMonikerImpl_IsDirty(FileMonikerImpl* This)
  *        FileMoniker_Load
  ******************************************************************************/
 HRESULT WINAPI FileMonikerImpl_Load(
-          FileMonikerImpl* This,
-          LPCOLESTR32 pszFileName,//Pointer to absolute path of the file to open
-          DWORD dwMode)           //Specifies the access mode from the STGM enumeration
+          IMoniker* iface,
+          IStream32* pStm)
 {
-    FIXME(ole,"(%p,%p,%ld),stub!\n",This,pszFileName,dwMode);
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p),stub!\n",This,pStm);
 
     return E_NOTIMPL;
 }
 
 /******************************************************************************
- *        FileMoniker_save
+ *        FileMoniker_Save
  ******************************************************************************/
 HRESULT WINAPI FileMonikerImpl_Save(
-          FileMonikerImpl* This,
-          LPCOLESTR32 pszFileName,   //Pointer to absolute path of the file where the object is saved
-          BOOL32 fRemember)          //Specifies whether the file is to be the current working file or not
+          IMoniker* iface,
+          IStream32* pStm,
+	  BOOL32 fClearDirty)
 {
-    FIXME(ole,"(%p,%p,%d),stub!\n",This,pszFileName,fRemember);
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p,%d),stub!\n",This,pStm,fClearDirty);
 
     return E_NOTIMPL;
 }
@@ -198,16 +201,18 @@ HRESULT WINAPI FileMonikerImpl_Save(
  *        FileMoniker_GetSizeMax
  ******************************************************************************/
 HRESULT WINAPI FileMonikerImpl_GetSizeMax(
-          FileMonikerImpl* This,
-          LPOLESTR32 *ppszFileName)  //Pointer to the path for the current file or the default save prompt
+          IMoniker* iface,
+          ULARGE_INTEGER* pcbSize)
 {
-    FIXME(ole,"(%p,%p),stub!\n",This,ppszFileName);
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p),stub!\n",This,pcbSize);
 
     return E_NOTIMPL;
 }
 
 /******************************************************************************
- *         FileMoniker_Constructor
+ *         FileMoniker_Construct
  *******************************************************************************/
 HRESULT WINAPI FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR32 lpszPathName){
 
@@ -221,9 +226,9 @@ HRESULT WINAPI FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR32 lpsz
 }
 
 /******************************************************************************
- *        FileMoniker_destructor
+ *        FileMoniker_Destroy
  *******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_destroy(FileMonikerImpl* This){
+HRESULT WINAPI FileMonikerImpl_Destroy(FileMonikerImpl* This){
 
     FIXME(ole,"(%p),stub!\n",This);
 
@@ -234,8 +239,10 @@ HRESULT WINAPI FileMonikerImpl_destroy(FileMonikerImpl* This){
 /******************************************************************************
  *                  FileMoniker_BindToObject
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_BindToObject(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                            REFIID riid, VOID** ppvResult){
+HRESULT WINAPI FileMonikerImpl_BindToObject(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                            REFIID riid, VOID** ppvResult)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
     
     FIXME(ole,"(%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,riid,ppvResult);
 
@@ -245,8 +252,10 @@ HRESULT WINAPI FileMonikerImpl_BindToObject(FileMonikerImpl* This,IBindCtx* pbc,
 /******************************************************************************
  *        FileMoniker_BindToStorage
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_BindToStorage(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                             REFIID riid, VOID** ppvResult){
+HRESULT WINAPI FileMonikerImpl_BindToStorage(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                             REFIID riid, VOID** ppvResult)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,riid,ppvResult);
 
@@ -256,8 +265,10 @@ HRESULT WINAPI FileMonikerImpl_BindToStorage(FileMonikerImpl* This,IBindCtx* pbc
 /******************************************************************************
  *        FileMoniker_Reduce
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_Reduce(FileMonikerImpl* This,IBindCtx* pbc, DWORD dwReduceHowFar,
-                                      IMoniker** ppmkToLeft, IMoniker** ppmkReduced){
+HRESULT WINAPI FileMonikerImpl_Reduce(IMoniker* iface,IBindCtx* pbc, DWORD dwReduceHowFar,
+                                      IMoniker** ppmkToLeft, IMoniker** ppmkReduced)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%ld,%p,%p),stub!\n",This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced);
 
@@ -267,8 +278,10 @@ HRESULT WINAPI FileMonikerImpl_Reduce(FileMonikerImpl* This,IBindCtx* pbc, DWORD
 /******************************************************************************
  *        FileMoniker_ComposeWith
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_ComposeWith(FileMonikerImpl* This,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric,
-                                           IMoniker** ppmkComposite){
+HRESULT WINAPI FileMonikerImpl_ComposeWith(IMoniker* iface,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric,
+                                           IMoniker** ppmkComposite)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%d,%p),stub!\n",This,pmkRight,fOnlyIfNotGeneric,ppmkComposite);
 
@@ -278,7 +291,9 @@ HRESULT WINAPI FileMonikerImpl_ComposeWith(FileMonikerImpl* This,IMoniker* pmkRi
 /******************************************************************************
  *        FileMoniker_Enum
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_Enum(FileMonikerImpl* This,BOOL32 fForward, IEnumMoniker** ppenumMoniker){
+HRESULT WINAPI FileMonikerImpl_Enum(IMoniker* iface,BOOL32 fForward, IEnumMoniker** ppenumMoniker)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%d,%p),stub!\n",This,fForward,ppenumMoniker);
 
@@ -289,7 +304,9 @@ HRESULT WINAPI FileMonikerImpl_Enum(FileMonikerImpl* This,BOOL32 fForward, IEnum
 /******************************************************************************
  *        FileMoniker_IsEqual
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_IsEqual(FileMonikerImpl* This,IMoniker* pmkOtherMoniker){
+HRESULT WINAPI FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pmkOtherMoniker);
 
@@ -299,7 +316,9 @@ HRESULT WINAPI FileMonikerImpl_IsEqual(FileMonikerImpl* This,IMoniker* pmkOtherM
 /******************************************************************************
  *        FileMoniker_Hash
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_Hash(FileMonikerImpl* This,DWORD* pdwHash){
+HRESULT WINAPI FileMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pdwHash);
 
@@ -309,8 +328,10 @@ HRESULT WINAPI FileMonikerImpl_Hash(FileMonikerImpl* This,DWORD* pdwHash){
 /******************************************************************************
  *        FileMoniker_IsRunning
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_IsRunning(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                         IMoniker* pmkNewlyRunning){
+HRESULT WINAPI FileMonikerImpl_IsRunning(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                         IMoniker* pmkNewlyRunning)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pmkNewlyRunning);
 
@@ -320,8 +341,10 @@ HRESULT WINAPI FileMonikerImpl_IsRunning(FileMonikerImpl* This,IBindCtx* pbc, IM
 /******************************************************************************
  *        FileMoniker_GetTimeOfLastChange
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_GetTimeOfLastChange(FileMonikerImpl* This, IBindCtx* pbc, IMoniker* pmkToLeft,
-                                                   FILETIME* pFileTime){
+HRESULT WINAPI FileMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
+                                                   FILETIME* pFileTime)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pFileTime);
 
@@ -331,7 +354,9 @@ HRESULT WINAPI FileMonikerImpl_GetTimeOfLastChange(FileMonikerImpl* This, IBindC
 /******************************************************************************
  *        FileMoniker_Inverse
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_Inverse(FileMonikerImpl* This,IMoniker** ppmk){
+HRESULT WINAPI FileMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,ppmk);
 
@@ -341,8 +366,10 @@ HRESULT WINAPI FileMonikerImpl_Inverse(FileMonikerImpl* This,IMoniker** ppmk){
 /******************************************************************************
  *        FileMoniker_CommonPrefixWith
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(FileMonikerImpl* This,IMoniker* pmkOther,
-                                                IMoniker** ppmkPrefix){
+HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,
+                                                IMoniker** ppmkPrefix)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pmkOther,ppmkPrefix);
 
@@ -352,7 +379,9 @@ HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(FileMonikerImpl* This,IMoniker*
 /******************************************************************************
  *        FileMoniker_RelativePathTo
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_RelativePathTo(FileMonikerImpl* This,IMoniker* pmOther, IMoniker** ppmkRelPath){
+HRESULT WINAPI FileMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pmOther,ppmkRelPath);
 
@@ -362,8 +391,10 @@ HRESULT WINAPI FileMonikerImpl_RelativePathTo(FileMonikerImpl* This,IMoniker* pm
 /******************************************************************************
  *        FileMoniker_GetDisplayName
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_GetDisplayName(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                              LPOLESTR32 *ppszDisplayName){
+HRESULT WINAPI FileMonikerImpl_GetDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                              LPOLESTR32 *ppszDisplayName)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,ppszDisplayName);
 
@@ -373,8 +404,10 @@ HRESULT WINAPI FileMonikerImpl_GetDisplayName(FileMonikerImpl* This,IBindCtx* pb
 /******************************************************************************
  *        FileMoniker_ParseDisplayName
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_ParseDisplayName(FileMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                                LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut){
+HRESULT WINAPI FileMonikerImpl_ParseDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                                LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut);
 
@@ -384,7 +417,9 @@ HRESULT WINAPI FileMonikerImpl_ParseDisplayName(FileMonikerImpl* This,IBindCtx*
 /******************************************************************************
  *        FileMoniker_IsSystemMonker
  ******************************************************************************/
-HRESULT WINAPI FileMonikerImpl_IsSystemMoniker(FileMonikerImpl* This,DWORD* pwdMksys){
+HRESULT WINAPI FileMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys)
+{
+    FileMonikerImpl* This=(FileMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pwdMksys);
 
@@ -421,7 +456,7 @@ HRESULT WINAPI CreateFileMoniker32(LPCOLESTR32 lpszPathName, LPMONIKER * ppmk)
     if (FAILED(hr))
         return hr;
 
-    hr = FileMonikerImpl_QueryInterface(newFileMoniker,&IID_IMoniker,(void**)ppmk);
+    hr = FileMonikerImpl_QueryInterface((IMoniker*)newFileMoniker,&IID_IMoniker,(void**)ppmk);
 
     return hr;
 }
diff --git a/ole/itemmoniker.c b/ole/itemmoniker.c
index b44472fc227..7c2a18491b9 100644
--- a/ole/itemmoniker.c
+++ b/ole/itemmoniker.c
@@ -23,73 +23,67 @@ typedef struct ItemMonikerImpl{
 
 } ItemMonikerImpl;
 
-HRESULT WINAPI ItemMonikerImpl_QueryInterface(ItemMonikerImpl* This,REFIID riid,void** ppvObject);
-ULONG   WINAPI ItemMonikerImpl_AddRef(ItemMonikerImpl* This);
-ULONG   WINAPI ItemMonikerImpl_Release(ItemMonikerImpl* This);
-HRESULT WINAPI ItemMonikerImpl_GetClassID(ItemMonikerImpl* This, CLSID *pClassID);
-HRESULT WINAPI ItemMonikerImpl_IsDirty(ItemMonikerImpl* This);
-HRESULT WINAPI ItemMonikerImpl_Load(ItemMonikerImpl* This,LPCOLESTR32 pszItemName,DWORD dwMode);
-HRESULT WINAPI ItemMonikerImpl_Save(ItemMonikerImpl* This,LPCOLESTR32 pszItemName,BOOL32 fRemember);
-HRESULT WINAPI ItemMonikerImpl_GetSizeMax(ItemMonikerImpl* This,LPOLESTR32 *ppszItemName);
-HRESULT WINAPI ItemMonikerImpl_Construct(ItemMonikerImpl* This, LPCOLESTR32 lpszDelim,LPCOLESTR32 lpszItem);
-HRESULT WINAPI ItemMonikerImpl_destroy(ItemMonikerImpl* This);
-HRESULT WINAPI ItemMonikerImpl_BindToObject(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
-HRESULT WINAPI ItemMonikerImpl_BindToStorage(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
-HRESULT WINAPI ItemMonikerImpl_Reduce(ItemMonikerImpl* This,IBindCtx* pbc, DWORD dwReduceHowFar,IMoniker** ppmkToLeft, IMoniker** ppmkReduced);
-HRESULT WINAPI ItemMonikerImpl_ComposeWith(ItemMonikerImpl* This,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric, IMoniker** ppmkComposite);
-HRESULT WINAPI ItemMonikerImpl_Enum(ItemMonikerImpl* This,BOOL32 fForward, IEnumMoniker** ppenumMoniker);
-HRESULT WINAPI ItemMonikerImpl_IsEqual(ItemMonikerImpl* This,IMoniker* pmkOtherMoniker);
-HRESULT WINAPI ItemMonikerImpl_Hash(ItemMonikerImpl* This,DWORD* pdwHash);
-HRESULT WINAPI ItemMonikerImpl_IsRunning(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning);
-HRESULT WINAPI ItemMonikerImpl_GetTimeOfLastChange(ItemMonikerImpl* This, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pItemTime);
-HRESULT WINAPI ItemMonikerImpl_Inverse(ItemMonikerImpl* This,IMoniker** ppmk);
-HRESULT WINAPI ItemMonikerImpl_CommonPrefixWith(ItemMonikerImpl* This,IMoniker* pmkOther, IMoniker** ppmkPrefix);
-HRESULT WINAPI ItemMonikerImpl_RelativePathTo(ItemMonikerImpl* This,IMoniker* pmOther, IMoniker** ppmkRelPath);
-HRESULT WINAPI ItemMonikerImpl_GetDisplayName(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 *ppszDisplayName);
-HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut);
-HRESULT WINAPI ItemMonikerImpl_IsSystemMoniker(ItemMonikerImpl* This,DWORD* pwdMksys);
-HRESULT WINAPI CreateItemMoniker16(LPCOLESTR16 lpszDelim,LPCOLESTR32  lpszItem,LPMONIKER * ppmk);
-HRESULT WINAPI CreateItemMoniker32(LPCOLESTR32 lpszDelim,LPCOLESTR32  lpszItem,LPMONIKER * ppmk);
-
-#define VTABLE_FUNC(a) (void*)(a)
+static HRESULT WINAPI ItemMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject);
+static ULONG   WINAPI ItemMonikerImpl_AddRef(IMoniker* iface);
+static ULONG   WINAPI ItemMonikerImpl_Release(IMoniker* iface);
+static HRESULT WINAPI ItemMonikerImpl_GetClassID(const IMoniker* iface, CLSID *pClassID);
+static HRESULT WINAPI ItemMonikerImpl_IsDirty(IMoniker* iface);
+static HRESULT WINAPI ItemMonikerImpl_Load(IMoniker* iface, IStream32* pStm);
+static HRESULT WINAPI ItemMonikerImpl_Save(IMoniker* iface, IStream32* pStm, BOOL32 fClearDirty);
+static HRESULT WINAPI ItemMonikerImpl_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize);
+static HRESULT WINAPI ItemMonikerImpl_BindToObject(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
+static HRESULT WINAPI ItemMonikerImpl_BindToStorage(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult);
+static HRESULT WINAPI ItemMonikerImpl_Reduce(IMoniker* iface,IBindCtx* pbc, DWORD dwReduceHowFar,IMoniker** ppmkToLeft, IMoniker** ppmkReduced);
+static HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric, IMoniker** ppmkComposite);
+static HRESULT WINAPI ItemMonikerImpl_Enum(IMoniker* iface,BOOL32 fForward, IEnumMoniker** ppenumMoniker);
+static HRESULT WINAPI ItemMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker);
+static HRESULT WINAPI ItemMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash);
+static HRESULT WINAPI ItemMonikerImpl_IsRunning(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning);
+static HRESULT WINAPI ItemMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pItemTime);
+static HRESULT WINAPI ItemMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk);
+static HRESULT WINAPI ItemMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther, IMoniker** ppmkPrefix);
+static HRESULT WINAPI ItemMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath);
+static HRESULT WINAPI ItemMonikerImpl_GetDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 *ppszDisplayName);
+static HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut);
+static HRESULT WINAPI ItemMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys);
+
+static HRESULT WINAPI ItemMonikerImpl_Construct(ItemMonikerImpl* iface, LPCOLESTR32 lpszDelim,LPCOLESTR32 lpszItem);
+static HRESULT WINAPI ItemMonikerImpl_Destroy(ItemMonikerImpl* iface);
+
 // Virtual function table for the ItemMonikerImpl class.
 static ICOM_VTABLE(IMoniker) VT_ItemMonikerImpl =
-{
-  {
-   {
     {
-      VTABLE_FUNC(ItemMonikerImpl_QueryInterface),
-      VTABLE_FUNC(ItemMonikerImpl_AddRef),
-      VTABLE_FUNC(ItemMonikerImpl_Release)
-    },
-    VTABLE_FUNC(ItemMonikerImpl_GetClassID)
-   },
-   VTABLE_FUNC(ItemMonikerImpl_IsDirty),
-   VTABLE_FUNC(ItemMonikerImpl_Load),
-   VTABLE_FUNC(ItemMonikerImpl_Save),
-   VTABLE_FUNC(ItemMonikerImpl_GetSizeMax)
-  },
-  VTABLE_FUNC(ItemMonikerImpl_BindToObject),
-  VTABLE_FUNC(ItemMonikerImpl_BindToStorage),
-  VTABLE_FUNC(ItemMonikerImpl_Reduce),
-  VTABLE_FUNC(ItemMonikerImpl_ComposeWith),
-  VTABLE_FUNC(ItemMonikerImpl_Enum),
-  VTABLE_FUNC(ItemMonikerImpl_IsEqual),
-  VTABLE_FUNC(ItemMonikerImpl_Hash),
-  VTABLE_FUNC(ItemMonikerImpl_IsRunning),
-  VTABLE_FUNC(ItemMonikerImpl_GetTimeOfLastChange),
-  VTABLE_FUNC(ItemMonikerImpl_Inverse),
-  VTABLE_FUNC(ItemMonikerImpl_CommonPrefixWith),
-  VTABLE_FUNC(ItemMonikerImpl_RelativePathTo),
-  VTABLE_FUNC(ItemMonikerImpl_GetDisplayName),
-  VTABLE_FUNC(ItemMonikerImpl_ParseDisplayName),
-  VTABLE_FUNC(ItemMonikerImpl_IsSystemMoniker)
+    ItemMonikerImpl_QueryInterface,
+    ItemMonikerImpl_AddRef,
+    ItemMonikerImpl_Release,
+    ItemMonikerImpl_GetClassID,
+    ItemMonikerImpl_IsDirty,
+    ItemMonikerImpl_Load,
+    ItemMonikerImpl_Save,
+    ItemMonikerImpl_GetSizeMax,
+    ItemMonikerImpl_BindToObject,
+    ItemMonikerImpl_BindToStorage,
+    ItemMonikerImpl_Reduce,
+    ItemMonikerImpl_ComposeWith,
+    ItemMonikerImpl_Enum,
+    ItemMonikerImpl_IsEqual,
+    ItemMonikerImpl_Hash,
+    ItemMonikerImpl_IsRunning,
+    ItemMonikerImpl_GetTimeOfLastChange,
+    ItemMonikerImpl_Inverse,
+    ItemMonikerImpl_CommonPrefixWith,
+    ItemMonikerImpl_RelativePathTo,
+    ItemMonikerImpl_GetDisplayName,
+    ItemMonikerImpl_ParseDisplayName,
+    ItemMonikerImpl_IsSystemMoniker
 };
 
 /*******************************************************************************
  *        ItemMoniker_QueryInterface
  *******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_QueryInterface(ItemMonikerImpl* This,REFIID riid,void** ppvObject){
+HRESULT WINAPI ItemMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
   TRACE(ole,"(%p,%p,%p)\n",This,riid,ppvObject);
 
@@ -116,15 +110,17 @@ HRESULT WINAPI ItemMonikerImpl_QueryInterface(ItemMonikerImpl* This,REFIID riid,
   if ((*ppvObject)==0)        return E_NOINTERFACE;
   
    // Query Interface always increases the reference count by one when it is successful
-  ItemMonikerImpl_AddRef(This);
+  ItemMonikerImpl_AddRef(iface);
 
-  return S_OK;;
+  return S_OK;
 }
 
 /******************************************************************************
  *        ItemMoniker_AddRef
  ******************************************************************************/
-ULONG WINAPI ItemMonikerImpl_AddRef(ItemMonikerImpl* This){
+ULONG WINAPI ItemMonikerImpl_AddRef(IMoniker* iface)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     TRACE(ole,"(%p)\n",This);
 
@@ -134,25 +130,27 @@ ULONG WINAPI ItemMonikerImpl_AddRef(ItemMonikerImpl* This){
 /******************************************************************************
  *        ItemMoniker_Release
  ******************************************************************************/
-ULONG WINAPI ItemMonikerImpl_Release(ItemMonikerImpl* This){
+ULONG WINAPI ItemMonikerImpl_Release(IMoniker* iface)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     TRACE(ole,"(%p),stub!\n",This);
 
     This->ref--;
 
     if (This->ref==0){
-        ItemMonikerImpl_destroy(This);
+        ItemMonikerImpl_Destroy(This);
         return 0;
     }
 
-    return This->ref;;
+    return This->ref;
 }
 
 /******************************************************************************
  *        ItemMoniker_GetClassID
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_GetClassID(ItemMonikerImpl* This, CLSID *pClassID){//Pointer to CLSID of object
-
+HRESULT WINAPI ItemMonikerImpl_GetClassID(const IMoniker* iface, CLSID *pClassID)//Pointer to CLSID of object
+{
     FIXME(ole,"(%p),stub!\n",pClassID);
     return E_NOTIMPL;
 }
@@ -160,8 +158,10 @@ HRESULT WINAPI ItemMonikerImpl_GetClassID(ItemMonikerImpl* This, CLSID *pClassID
 /******************************************************************************
  *        ItemMoniker_IsDirty
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_IsDirty(ItemMonikerImpl* This)
+HRESULT WINAPI ItemMonikerImpl_IsDirty(IMoniker* iface)
 {
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
+
     FIXME(ole,"(%p),stub!\n",This);
     return E_NOTIMPL;
 }
@@ -170,23 +170,26 @@ HRESULT WINAPI ItemMonikerImpl_IsDirty(ItemMonikerImpl* This)
  *        ItemMoniker_Load
  ******************************************************************************/
 HRESULT WINAPI ItemMonikerImpl_Load(
-          ItemMonikerImpl* This,
-          LPCOLESTR32 pszFileName,//Pointer to absolute path of the file to open
-          DWORD dwMode)           //Specifies the access mode from the STGM enumeration
+          IMoniker* iface,
+          IStream32* pStm)
 {
-    FIXME(ole,"(%p,%ld),stub!\n",pszFileName,dwMode);
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p),stub!\n",This,pStm);
     return E_NOTIMPL;
 }
 
 /******************************************************************************
- *        ItemMoniker_save
+ *        ItemMoniker_Save
  ******************************************************************************/
 HRESULT WINAPI ItemMonikerImpl_Save(
-          ItemMonikerImpl* This,
-          LPCOLESTR32 pszFileName,   //Pointer to absolute path of the file where the object is saved
-          BOOL32 fRemember)          //Specifies whether the file is to be the current working file or not
+          IMoniker* iface,
+          IStream32* pStm,
+          BOOL32 fClearDirty)
 {
-    FIXME(ole,"(%p,%d),stub!\n",pszFileName,fRemember);
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p,%d),stub!\n",This,pStm,fClearDirty);
     return E_NOTIMPL;
 }
 
@@ -194,15 +197,17 @@ HRESULT WINAPI ItemMonikerImpl_Save(
  *        ItemMoniker_GetSizeMax
  ******************************************************************************/
 HRESULT WINAPI ItemMonikerImpl_GetSizeMax(
-          ItemMonikerImpl* This,
-          LPOLESTR32 *ppszFileName)  //Pointer to the path for the current file or the default save prompt
+          IMoniker* iface,
+          ULARGE_INTEGER* pcbSize)
 {
-    FIXME(ole,"(%p),stub!\n",ppszFileName);
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
+
+    FIXME(ole,"(%p,%p),stub!\n",This,pcbSize);
     return E_NOTIMPL;
 }
 
 /******************************************************************************
- *         ItemMoniker_Constructor
+ *         ItemMoniker_Construct
  *******************************************************************************/
 HRESULT WINAPI ItemMonikerImpl_Construct(ItemMonikerImpl* This, LPCOLESTR32 lpszDelim,LPCOLESTR32 lpszItem){
 
@@ -216,9 +221,9 @@ HRESULT WINAPI ItemMonikerImpl_Construct(ItemMonikerImpl* This, LPCOLESTR32 lpsz
 }
 
 /******************************************************************************
- *        ItemMoniker_destructor
+ *        ItemMoniker_Destroy
  *******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_destroy(ItemMonikerImpl* This){
+HRESULT WINAPI ItemMonikerImpl_Destroy(ItemMonikerImpl* This){
 
     FIXME(ole,"(%p),stub!\n",This);
 
@@ -229,8 +234,10 @@ HRESULT WINAPI ItemMonikerImpl_destroy(ItemMonikerImpl* This){
 /******************************************************************************
  *                  ItemMoniker_BindToObject
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_BindToObject(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                            REFIID riid, VOID** ppvResult){
+HRESULT WINAPI ItemMonikerImpl_BindToObject(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                            REFIID riid, VOID** ppvResult)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
     
     FIXME(ole,"(%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,riid,ppvResult);
     return E_NOTIMPL;
@@ -239,8 +246,10 @@ HRESULT WINAPI ItemMonikerImpl_BindToObject(ItemMonikerImpl* This,IBindCtx* pbc,
 /******************************************************************************
  *        ItemMoniker_BindToStorage
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_BindToStorage(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                             REFIID riid, VOID** ppvResult){
+HRESULT WINAPI ItemMonikerImpl_BindToStorage(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                             REFIID riid, VOID** ppvResult)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,riid,ppvResult);
     return E_NOTIMPL;
@@ -249,8 +258,10 @@ HRESULT WINAPI ItemMonikerImpl_BindToStorage(ItemMonikerImpl* This,IBindCtx* pbc
 /******************************************************************************
  *        ItemMoniker_Reduce
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_Reduce(ItemMonikerImpl* This,IBindCtx* pbc, DWORD dwReduceHowFar,
-                                      IMoniker** ppmkToLeft, IMoniker** ppmkReduced){
+HRESULT WINAPI ItemMonikerImpl_Reduce(IMoniker* iface,IBindCtx* pbc, DWORD dwReduceHowFar,
+                                      IMoniker** ppmkToLeft, IMoniker** ppmkReduced)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%ld,%p,%p),stub!\n",This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced);
     return E_NOTIMPL;
@@ -259,8 +270,10 @@ HRESULT WINAPI ItemMonikerImpl_Reduce(ItemMonikerImpl* This,IBindCtx* pbc, DWORD
 /******************************************************************************
  *        ItemMoniker_ComposeWith
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_ComposeWith(ItemMonikerImpl* This,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric,
-                                           IMoniker** ppmkComposite){
+HRESULT WINAPI ItemMonikerImpl_ComposeWith(IMoniker* iface,IMoniker* pmkRight,BOOL32 fOnlyIfNotGeneric,
+                                           IMoniker** ppmkComposite)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%d,%p),stub!\n",This,pmkRight,fOnlyIfNotGeneric,ppmkComposite);
     return E_NOTIMPL;
@@ -269,7 +282,9 @@ HRESULT WINAPI ItemMonikerImpl_ComposeWith(ItemMonikerImpl* This,IMoniker* pmkRi
 /******************************************************************************
  *        ItemMoniker_Enum
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_Enum(ItemMonikerImpl* This,BOOL32 fForward, IEnumMoniker** ppenumMoniker){
+HRESULT WINAPI ItemMonikerImpl_Enum(IMoniker* iface,BOOL32 fForward, IEnumMoniker** ppenumMoniker)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%d,%p),stub!\n",This,fForward,ppenumMoniker);
     return E_NOTIMPL;
@@ -279,7 +294,9 @@ HRESULT WINAPI ItemMonikerImpl_Enum(ItemMonikerImpl* This,BOOL32 fForward, IEnum
 /******************************************************************************
  *        ItemMoniker_IsEqual
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_IsEqual(ItemMonikerImpl* This,IMoniker* pmkOtherMoniker){
+HRESULT WINAPI ItemMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pmkOtherMoniker);
     return E_NOTIMPL;
@@ -288,7 +305,9 @@ HRESULT WINAPI ItemMonikerImpl_IsEqual(ItemMonikerImpl* This,IMoniker* pmkOtherM
 /******************************************************************************
  *        ItemMoniker_Hash
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_Hash(ItemMonikerImpl* This,DWORD* pdwHash){
+HRESULT WINAPI ItemMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pdwHash);
     return E_NOTIMPL;
@@ -297,8 +316,10 @@ HRESULT WINAPI ItemMonikerImpl_Hash(ItemMonikerImpl* This,DWORD* pdwHash){
 /******************************************************************************
  *        ItemMoniker_IsRunning
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_IsRunning(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                         IMoniker* pmkNewlyRunning){
+HRESULT WINAPI ItemMonikerImpl_IsRunning(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                         IMoniker* pmkNewlyRunning)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pmkNewlyRunning);
     return E_NOTIMPL;
@@ -307,8 +328,10 @@ HRESULT WINAPI ItemMonikerImpl_IsRunning(ItemMonikerImpl* This,IBindCtx* pbc, IM
 /******************************************************************************
  *        ItemMoniker_GetTimeOfLastChange
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_GetTimeOfLastChange(ItemMonikerImpl* This, IBindCtx* pbc, IMoniker* pmkToLeft,
-                                                   FILETIME* pFileTime){
+HRESULT WINAPI ItemMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
+                                                   FILETIME* pFileTime)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pFileTime);
     return E_NOTIMPL;
@@ -317,7 +340,9 @@ HRESULT WINAPI ItemMonikerImpl_GetTimeOfLastChange(ItemMonikerImpl* This, IBindC
 /******************************************************************************
  *        ItemMoniker_Inverse
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_Inverse(ItemMonikerImpl* This,IMoniker** ppmk){
+HRESULT WINAPI ItemMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,ppmk);
     return E_NOTIMPL;
@@ -326,8 +351,10 @@ HRESULT WINAPI ItemMonikerImpl_Inverse(ItemMonikerImpl* This,IMoniker** ppmk){
 /******************************************************************************
  *        ItemMoniker_CommonPrefixWith
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_CommonPrefixWith(ItemMonikerImpl* This,IMoniker* pmkOther,
-                                                IMoniker** ppmkPrefix){
+HRESULT WINAPI ItemMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,
+                                                IMoniker** ppmkPrefix)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pmkOther,ppmkPrefix);
     return E_NOTIMPL;
@@ -336,7 +363,9 @@ HRESULT WINAPI ItemMonikerImpl_CommonPrefixWith(ItemMonikerImpl* This,IMoniker*
 /******************************************************************************
  *        ItemMoniker_RelativePathTo
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_RelativePathTo(ItemMonikerImpl* This,IMoniker* pmOther, IMoniker** ppmkRelPath){
+HRESULT WINAPI ItemMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p),stub!\n",This,pmOther,ppmkRelPath);
     return E_NOTIMPL;
@@ -345,8 +374,10 @@ HRESULT WINAPI ItemMonikerImpl_RelativePathTo(ItemMonikerImpl* This,IMoniker* pm
 /******************************************************************************
  *        ItemMoniker_GetDisplayName
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_GetDisplayName(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                              LPOLESTR32 *ppszDisplayName){
+HRESULT WINAPI ItemMonikerImpl_GetDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                              LPOLESTR32 *ppszDisplayName)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,ppszDisplayName);
     return E_NOTIMPL;
@@ -355,8 +386,10 @@ HRESULT WINAPI ItemMonikerImpl_GetDisplayName(ItemMonikerImpl* This,IBindCtx* pb
 /******************************************************************************
  *        ItemMoniker_ParseDisplayName
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(ItemMonikerImpl* This,IBindCtx* pbc, IMoniker* pmkToLeft,
-                                                LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut){
+HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft,
+                                                LPOLESTR32 pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p,%p,%p,%p,%p),stub!\n",This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut);
     return E_NOTIMPL;
@@ -365,7 +398,9 @@ HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(ItemMonikerImpl* This,IBindCtx*
 /******************************************************************************
  *        ItemMoniker_IsSystemMonker
  ******************************************************************************/
-HRESULT WINAPI ItemMonikerImpl_IsSystemMoniker(ItemMonikerImpl* This,DWORD* pwdMksys){
+HRESULT WINAPI ItemMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys)
+{
+    ItemMonikerImpl* This=(ItemMonikerImpl*)iface;
 
     FIXME(ole,"(%p,%p),stub!\n",This,pwdMksys);
     return E_NOTIMPL;
@@ -402,7 +437,7 @@ HRESULT WINAPI CreateItemMoniker32(LPCOLESTR32 lpszDelim,LPCOLESTR32  lpszItem,
     if (FAILED(hr))
         return hr;
 
-    hr = ItemMonikerImpl_QueryInterface(newItemMoniker,&IID_IMoniker,(void**)ppmk);
+    hr = ItemMonikerImpl_QueryInterface((IMoniker*)newItemMoniker,&IID_IMoniker,(void**)ppmk);
 
     return hr;
 }
diff --git a/ole/stg_stream.c b/ole/stg_stream.c
index cceb79016e5..15373299fef 100644
--- a/ole/stg_stream.c
+++ b/ole/stg_stream.c
@@ -28,24 +28,20 @@
  */
 static ICOM_VTABLE(IStream32) StgStreamImpl_Vtbl =
 {
-  {
-    {
-      VTABLE_FUNC(StgStreamImpl_QueryInterface),
-      VTABLE_FUNC(StgStreamImpl_AddRef),
-      VTABLE_FUNC(StgStreamImpl_Release)
-    },
-    VTABLE_FUNC(StgStreamImpl_Read),
-    VTABLE_FUNC(StgStreamImpl_Write)
-  },
-  VTABLE_FUNC(StgStreamImpl_Seek),
-  VTABLE_FUNC(StgStreamImpl_SetSize),
-  VTABLE_FUNC(StgStreamImpl_CopyTo),
-  VTABLE_FUNC(StgStreamImpl_Commit),
-  VTABLE_FUNC(StgStreamImpl_Revert),
-  VTABLE_FUNC(StgStreamImpl_LockRegion),
-  VTABLE_FUNC(StgStreamImpl_UnlockRegion),
-  VTABLE_FUNC(StgStreamImpl_Stat),
-  VTABLE_FUNC(StgStreamImpl_Clone)
+    StgStreamImpl_QueryInterface,
+    StgStreamImpl_AddRef,
+    StgStreamImpl_Release,
+    StgStreamImpl_Read,
+    StgStreamImpl_Write,
+    StgStreamImpl_Seek,
+    StgStreamImpl_SetSize,
+    StgStreamImpl_CopyTo,
+    StgStreamImpl_Commit,
+    StgStreamImpl_Revert,
+    StgStreamImpl_LockRegion,
+    StgStreamImpl_UnlockRegion,
+    StgStreamImpl_Stat,
+    StgStreamImpl_Clone
 };
 
 /******************************************************************************
@@ -80,7 +76,7 @@ StgStreamImpl* StgStreamImpl_Construct(
      * stream out-lives the storage in the client application.
      */
     newStream->parentStorage = parentStorage;
-    IStorage32_AddRef(newStream->parentStorage);
+    IStorage32_AddRef((IStorage32*)newStream->parentStorage);
     
     newStream->ownerProperty = ownerProperty;
     
@@ -120,7 +116,7 @@ void StgStreamImpl_Destroy(StgStreamImpl* This)
   /*
    * Release the reference we are holding on the parent storage.
    */
-  IStorage32_Release(This->parentStorage);
+  IStorage32_Release((IStorage32*)This->parentStorage);
   This->parentStorage = 0;
 
   /*
@@ -149,10 +145,12 @@ void StgStreamImpl_Destroy(StgStreamImpl* This)
  * class
  */
 HRESULT WINAPI StgStreamImpl_QueryInterface(
-		  StgStreamImpl* This,
+		  IStream32*     iface,
 		  REFIID         riid,	      /* [in] */          
 		  void**         ppvObject)   /* [iid_is][out] */ 
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   /*
    * Perform a sanity check on the parameters.
    */
@@ -186,7 +184,7 @@ HRESULT WINAPI StgStreamImpl_QueryInterface(
    * Query Interface always increases the reference count by one when it is
    * successful
    */
-  StgStreamImpl_AddRef(This);
+  StgStreamImpl_AddRef(iface);
   
   return S_OK;;
 }
@@ -196,8 +194,10 @@ HRESULT WINAPI StgStreamImpl_QueryInterface(
  * class
  */
 ULONG WINAPI StgStreamImpl_AddRef(
-		StgStreamImpl* This)
+		IStream32* iface)
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   This->ref++;
   
   return This->ref;
@@ -208,8 +208,10 @@ ULONG WINAPI StgStreamImpl_AddRef(
  * class
  */
 ULONG WINAPI StgStreamImpl_Release(
-		StgStreamImpl* This)
+		IStream32* iface)
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   ULONG newRef;
   
   This->ref--;
@@ -303,11 +305,13 @@ void StgStreamImpl_OpenBlockChain(
  * See the documentation of ISequentialStream for more info.
  */
 HRESULT WINAPI StgStreamImpl_Read( 
-		  StgStreamImpl* This,
+		  IStream32*     iface,
 		  void*          pv,        /* [length_is][size_is][out] */
 		  ULONG          cb,        /* [in] */                     
 		  ULONG*         pcbRead)   /* [out] */                    
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   ULONG bytesReadBuffer;
   ULONG bytesToReadFromBuffer;
   
@@ -381,11 +385,13 @@ HRESULT WINAPI StgStreamImpl_Read(
  * See the documentation of ISequentialStream for more info.
  */
 HRESULT WINAPI StgStreamImpl_Write(
-	          StgStreamImpl* This,
+	          IStream32*     iface,
 		  const void*    pv,          /* [size_is][in] */ 
 		  ULONG          cb,          /* [in] */          
 		  ULONG*         pcbWritten)  /* [out] */         
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   ULARGE_INTEGER newSize;
   ULONG bytesWritten = 0;
   
@@ -412,7 +418,7 @@ HRESULT WINAPI StgStreamImpl_Write(
   if (newSize.LowPart > This->streamSize.LowPart)
   {
     /* grow stream */
-    StgStreamImpl_SetSize(This, newSize);
+    StgStreamImpl_SetSize(iface, newSize);
   }
   
   /*
@@ -456,11 +462,13 @@ HRESULT WINAPI StgStreamImpl_Write(
  * See the documentation of IStream for more info.
  */        
 HRESULT WINAPI StgStreamImpl_Seek( 
-		  StgStreamImpl*  This,
+		  IStream32*      iface,
 		  LARGE_INTEGER   dlibMove,         /* [in] */ 
 		  DWORD           dwOrigin,         /* [in] */ 
 		  ULARGE_INTEGER* plibNewPosition) /* [out] */
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   ULARGE_INTEGER newPosition;
 
   /* 
@@ -531,9 +539,11 @@ HRESULT WINAPI StgStreamImpl_Seek(
  * See the documentation of IStream for more info.
  */
 HRESULT WINAPI StgStreamImpl_SetSize( 
-				     StgStreamImpl*  This,
+				     IStream32*      iface,
 				     ULARGE_INTEGER  libNewSize)   /* [in] */ 
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   StgProperty    curProperty;
   BOOL32         Success;
 
@@ -621,7 +631,7 @@ HRESULT WINAPI StgStreamImpl_SetSize(
 }
         
 HRESULT WINAPI StgStreamImpl_CopyTo( 
-				    StgStreamImpl*  This,
+				    IStream32*      iface,
 				    IStream32*      pstm,         /* [unique][in] */ 
 				    ULARGE_INTEGER  cb,           /* [in] */         
 				    ULARGE_INTEGER* pcbRead,      /* [out] */        
@@ -639,7 +649,7 @@ HRESULT WINAPI StgStreamImpl_CopyTo(
  * See the documentation of IStream for more info.
  */        
 HRESULT WINAPI StgStreamImpl_Commit( 
-		  StgStreamImpl*  This,
+		  IStream32*      iface,
 		  DWORD           grfCommitFlags)  /* [in] */ 
 {
   return S_OK;
@@ -654,13 +664,13 @@ HRESULT WINAPI StgStreamImpl_Commit(
  * See the documentation of IStream for more info.
  */        
 HRESULT WINAPI StgStreamImpl_Revert( 
-		  StgStreamImpl*  This)
+		  IStream32* iface)
 {
   return S_OK;
 }
 
 HRESULT WINAPI StgStreamImpl_LockRegion( 
-					StgStreamImpl*  This,
+					IStream32*     iface,
 					ULARGE_INTEGER libOffset,   /* [in] */ 
 					ULARGE_INTEGER cb,          /* [in] */ 
 					DWORD          dwLockType)  /* [in] */ 
@@ -669,7 +679,7 @@ HRESULT WINAPI StgStreamImpl_LockRegion(
 }
 
 HRESULT WINAPI StgStreamImpl_UnlockRegion( 
-					  StgStreamImpl* This,
+					  IStream32*     iface,
 					  ULARGE_INTEGER libOffset,   /* [in] */ 
 					  ULARGE_INTEGER cb,          /* [in] */ 
 					  DWORD          dwLockType)  /* [in] */ 
@@ -686,10 +696,12 @@ HRESULT WINAPI StgStreamImpl_UnlockRegion(
  * See the documentation of IStream for more info.
  */        
 HRESULT WINAPI StgStreamImpl_Stat( 
-		  StgStreamImpl* This,
+		  IStream32*     iface,
 		  STATSTG*       pstatstg,     /* [out] */
 		  DWORD          grfStatFlag)  /* [in] */ 
 {
+  StgStreamImpl* const This=(StgStreamImpl*)iface;
+
   StgProperty    curProperty;
   BOOL32         readSucessful;
   
@@ -713,7 +725,7 @@ HRESULT WINAPI StgStreamImpl_Stat(
 }
         
 HRESULT WINAPI StgStreamImpl_Clone( 
-				   StgStreamImpl* This,
+				   IStream32*     iface,
 				   IStream32**    ppstm) /* [out] */ 
 {
   return E_NOTIMPL;
diff --git a/ole/storage32.c b/ole/storage32.c
index f7a2dabf120..0a0887d7c13 100644
--- a/ole/storage32.c
+++ b/ole/storage32.c
@@ -89,55 +89,51 @@ static DWORD GetCreationModeFromSTGM(DWORD stgm);
 /*
  * Virtual function table for the IStorage32Impl class.
  */
-static ICOM_VTABLE(IStorage32) Storage32Impl_VTable =
+static ICOM_VTABLE(IStorage32) Storage32Impl_Vtbl =
 {
-  {
-    VTABLE_FUNC(Storage32BaseImpl_QueryInterface),
-    VTABLE_FUNC(Storage32BaseImpl_AddRef),
-    VTABLE_FUNC(Storage32BaseImpl_Release)
-  },
-  VTABLE_FUNC(Storage32BaseImpl_CreateStream),
-  VTABLE_FUNC(Storage32BaseImpl_OpenStream),
-  VTABLE_FUNC(Storage32Impl_CreateStorage),
-  VTABLE_FUNC(Storage32BaseImpl_OpenStorage),
-  VTABLE_FUNC(Storage32Impl_CopyTo),
-  VTABLE_FUNC(Storage32Impl_MoveElementTo),
-  VTABLE_FUNC(Storage32Impl_Commit),
-  VTABLE_FUNC(Storage32Impl_Revert),
-  VTABLE_FUNC(Storage32BaseImpl_EnumElements),
-  VTABLE_FUNC(Storage32Impl_DestroyElement),
-  VTABLE_FUNC(Storage32BaseImpl_RenameElement),
-  VTABLE_FUNC(Storage32Impl_SetElementTimes),
-  VTABLE_FUNC(Storage32BaseImpl_SetClass),
-  VTABLE_FUNC(Storage32Impl_SetStateBits),
-  VTABLE_FUNC(Storage32BaseImpl_Stat)
+    Storage32BaseImpl_QueryInterface,
+    Storage32BaseImpl_AddRef,
+    Storage32BaseImpl_Release,
+    Storage32BaseImpl_CreateStream,
+    Storage32BaseImpl_OpenStream,
+    Storage32Impl_CreateStorage,
+    Storage32BaseImpl_OpenStorage,
+    Storage32Impl_CopyTo,
+    Storage32Impl_MoveElementTo,
+    Storage32Impl_Commit,
+    Storage32Impl_Revert,
+    Storage32BaseImpl_EnumElements,
+    Storage32Impl_DestroyElement,
+    Storage32BaseImpl_RenameElement,
+    Storage32Impl_SetElementTimes,
+    Storage32BaseImpl_SetClass,
+    Storage32Impl_SetStateBits,
+    Storage32BaseImpl_Stat
 };
 
 /*
  * Virtual function table for the Storage32InternalImpl class.
  */
-static ICOM_VTABLE(IStorage32) Storage32InternalImpl_VTable =
-{
+static ICOM_VTABLE(IStorage32) Storage32InternalImpl_Vtbl =
   {
-    VTABLE_FUNC(Storage32BaseImpl_QueryInterface),
-    VTABLE_FUNC(Storage32BaseImpl_AddRef),
-    VTABLE_FUNC(Storage32BaseImpl_Release)
-  },
-  VTABLE_FUNC(Storage32BaseImpl_CreateStream),
-  VTABLE_FUNC(Storage32BaseImpl_OpenStream),
-  VTABLE_FUNC(Storage32Impl_CreateStorage),
-  VTABLE_FUNC(Storage32BaseImpl_OpenStorage),
-  VTABLE_FUNC(Storage32Impl_CopyTo),
-  VTABLE_FUNC(Storage32Impl_MoveElementTo),
-  VTABLE_FUNC(Storage32InternalImpl_Commit),
-  VTABLE_FUNC(Storage32InternalImpl_Revert),
-  VTABLE_FUNC(Storage32BaseImpl_EnumElements),
-  VTABLE_FUNC(Storage32Impl_DestroyElement),
-  VTABLE_FUNC(Storage32BaseImpl_RenameElement),
-  VTABLE_FUNC(Storage32Impl_SetElementTimes),
-  VTABLE_FUNC(Storage32BaseImpl_SetClass),
-  VTABLE_FUNC(Storage32Impl_SetStateBits),
-  VTABLE_FUNC(Storage32BaseImpl_Stat)
+    Storage32BaseImpl_QueryInterface,
+    Storage32BaseImpl_AddRef,
+    Storage32BaseImpl_Release,
+    Storage32BaseImpl_CreateStream,
+    Storage32BaseImpl_OpenStream,
+    Storage32Impl_CreateStorage,
+    Storage32BaseImpl_OpenStorage,
+    Storage32Impl_CopyTo,
+    Storage32Impl_MoveElementTo,
+    Storage32InternalImpl_Commit,
+    Storage32InternalImpl_Revert,
+    Storage32BaseImpl_EnumElements,
+    Storage32Impl_DestroyElement,
+    Storage32BaseImpl_RenameElement,
+    Storage32Impl_SetElementTimes,
+    Storage32BaseImpl_SetClass,
+    Storage32Impl_SetStateBits,
+    Storage32BaseImpl_Stat
 };
 
 /*
@@ -145,15 +141,13 @@ static ICOM_VTABLE(IStorage32) Storage32InternalImpl_VTable =
  */
 static ICOM_VTABLE(IEnumSTATSTG) IEnumSTATSTGImpl_Vtbl =
 {
-  {
-    VTABLE_FUNC(IEnumSTATSTGImpl_QueryInterface),
-    VTABLE_FUNC(IEnumSTATSTGImpl_AddRef),
-    VTABLE_FUNC(IEnumSTATSTGImpl_Release)
-  },
-  VTABLE_FUNC(IEnumSTATSTGImpl_Next),
-  VTABLE_FUNC(IEnumSTATSTGImpl_Skip),
-  VTABLE_FUNC(IEnumSTATSTGImpl_Reset),
-  VTABLE_FUNC(IEnumSTATSTGImpl_Clone)
+    IEnumSTATSTGImpl_QueryInterface,
+    IEnumSTATSTGImpl_AddRef,
+    IEnumSTATSTGImpl_Release,
+    IEnumSTATSTGImpl_Next,
+    IEnumSTATSTGImpl_Skip,
+    IEnumSTATSTGImpl_Reset,
+    IEnumSTATSTGImpl_Clone
 };
 
 
@@ -173,10 +167,11 @@ static ICOM_VTABLE(IEnumSTATSTG) IEnumSTATSTGImpl_Vtbl =
  * See Windows documentation for more details on IUnknown methods.
  */
 HRESULT WINAPI Storage32BaseImpl_QueryInterface(
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   REFIID             riid,
   void**             ppvObject)
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   /*
    * Perform a sanity check on the parameters.
    */
@@ -210,9 +205,9 @@ HRESULT WINAPI Storage32BaseImpl_QueryInterface(
    * Query Interface always increases the reference count by one when it is
    * successful
    */
-  Storage32BaseImpl_AddRef(This);
+  Storage32BaseImpl_AddRef(iface);
 
-  return S_OK;;
+  return S_OK;
 }
         
 /************************************************************************
@@ -224,8 +219,9 @@ HRESULT WINAPI Storage32BaseImpl_QueryInterface(
  * See Windows documentation for more details on IUnknown methods.
  */
 ULONG WINAPI Storage32BaseImpl_AddRef( 
-            Storage32BaseImpl* This)
+            IStorage32* iface)
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   This->ref++;
 
   return This->ref;
@@ -240,8 +236,9 @@ ULONG WINAPI Storage32BaseImpl_AddRef(
  * See Windows documentation for more details on IUnknown methods.
  */
 ULONG WINAPI Storage32BaseImpl_Release( 
-      Storage32BaseImpl* This)
+      IStorage32* iface)
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   /*
    * Decrease the reference count on this object.
    */
@@ -273,13 +270,14 @@ ULONG WINAPI Storage32BaseImpl_Release(
  * See Windows documentation for more details on IStorage methods.
  */
 HRESULT WINAPI Storage32BaseImpl_OpenStream( 
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   const OLECHAR32*   pwcsName,  /* [string][in] */
   void*              reserved1, /* [unique][in] */
   DWORD              grfMode,   /* [in]  */        
   DWORD              reserved2, /* [in]  */        
   IStream32**        ppstm)     /* [out] */       
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   IEnumSTATSTGImpl* propertyEnumeration;
   StgStreamImpl*    newStream;
   StgProperty       currentProperty;
@@ -340,13 +338,13 @@ HRESULT WINAPI Storage32BaseImpl_OpenStream(
     
     if (newStream!=0)
     {
+      *ppstm = (IStream32*)newStream;
+
       /*
        * Since we are returning a pointer to the interface, we have to 
        * nail down the reference.
        */
-      StgStreamImpl_AddRef(newStream);
-      
-      *ppstm = (IStream32*)newStream;
+      StgStreamImpl_AddRef(*ppstm);
       
       return S_OK;
     }
@@ -365,7 +363,7 @@ HRESULT WINAPI Storage32BaseImpl_OpenStream(
  * See Windows documentation for more details on IStorage methods.
  */        
 HRESULT WINAPI Storage32BaseImpl_OpenStorage( 
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   const OLECHAR32*   pwcsName,      /* [string][unique][in] */ 
   IStorage32*        pstgPriority,  /* [unique][in] */         
   DWORD              grfMode,       /* [in] */                 
@@ -373,6 +371,7 @@ HRESULT WINAPI Storage32BaseImpl_OpenStorage(
   DWORD              reserved,      /* [in] */                 
   IStorage32**       ppstg)         /* [out] */                        
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   Storage32InternalImpl* newStorage;
   IEnumSTATSTGImpl*      propertyEnumeration;
   StgProperty            currentProperty;
@@ -438,13 +437,13 @@ HRESULT WINAPI Storage32BaseImpl_OpenStorage(
     
     if (newStorage != 0)
     {
+      *ppstg = (IStorage32*)newStorage;
+
       /*
        * Since we are returning a pointer to the interface, 
        * we have to nail down the reference.
        */
-      Storage32BaseImpl_AddRef((Storage32BaseImpl*)newStorage);
-      
-      *ppstg = (IStorage32*)newStorage;
+      Storage32BaseImpl_AddRef(*ppstg);
       
       return S_OK;
     }
@@ -464,12 +463,13 @@ HRESULT WINAPI Storage32BaseImpl_OpenStorage(
  * See Windows documentation for more details on IStorage methods.
  */        
 HRESULT WINAPI Storage32BaseImpl_EnumElements( 
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   DWORD              reserved1, /* [in] */                  
   void*              reserved2, /* [size_is][unique][in] */ 
   DWORD              reserved3, /* [in] */                  
   IEnumSTATSTG**     ppenum)    /* [out] */                 
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   IEnumSTATSTGImpl* newEnum;
 
   /*
@@ -487,13 +487,13 @@ HRESULT WINAPI Storage32BaseImpl_EnumElements(
 
   if (newEnum!=0)
   {
+    *ppenum = (IEnumSTATSTG*)newEnum;
+
     /*
      * Don't forget to nail down a reference to the new object before
      * returning it.
      */
-    IEnumSTATSTGImpl_AddRef(newEnum);
-    
-    *ppenum = (IEnumSTATSTG*)newEnum;
+    IEnumSTATSTGImpl_AddRef(*ppenum);
     
     return S_OK;
   }
@@ -509,10 +509,11 @@ HRESULT WINAPI Storage32BaseImpl_EnumElements(
  * See Windows documentation for more details on IStorage methods.
  */        
 HRESULT WINAPI Storage32BaseImpl_Stat( 
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   STATSTG*           pstatstg,     /* [out] */ 
   DWORD              grfStatFlag)  /* [in] */  
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   StgProperty    curProperty;
   BOOL32         readSucessful;
 
@@ -555,10 +556,11 @@ HRESULT WINAPI Storage32BaseImpl_Stat(
  *    perform a DestroyElement of the old StgProperty.
  */
 HRESULT WINAPI Storage32BaseImpl_RenameElement(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsOldName,  /* [in] */
             const OLECHAR32*   pwcsNewName)  /* [in] */
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   IEnumSTATSTGImpl* propertyEnumeration;
   StgProperty       currentProperty;
   ULONG             foundPropertyIndex;
@@ -585,7 +587,7 @@ HRESULT WINAPI Storage32BaseImpl_RenameElement(
     return STG_E_FILEALREADYEXISTS;
   }
 
-  IEnumSTATSTGImpl_Reset(propertyEnumeration);
+  IEnumSTATSTGImpl_Reset((IEnumSTATSTG*)propertyEnumeration);
 
   /*
    * Search the enumeration for the old property name
@@ -680,7 +682,7 @@ HRESULT WINAPI Storage32BaseImpl_RenameElement(
      * Invoke Destroy to get rid of the ole property and automatically redo 
      * the linking of it's previous and next members... 
      */ 
-    Storage32Impl_DestroyElement(This->ancestorStorage, pwcsOldName); 
+    Storage32Impl_DestroyElement((IStorage32*)This->ancestorStorage, pwcsOldName); 
 
   }
   else
@@ -702,13 +704,14 @@ HRESULT WINAPI Storage32BaseImpl_RenameElement(
  * See Windows documentation for more details on IStorage methods.
  */
 HRESULT WINAPI Storage32BaseImpl_CreateStream(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsName,  /* [string][in] */
             DWORD              grfMode,   /* [in] */
             DWORD              reserved1, /* [in] */
             DWORD              reserved2, /* [in] */
             IStream32**        ppstm)     /* [out] */
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   IEnumSTATSTGImpl* propertyEnumeration;
   StgStreamImpl*    newStream;
   StgProperty       currentProperty, newStreamProperty;
@@ -760,7 +763,7 @@ HRESULT WINAPI Storage32BaseImpl_CreateStream(
      * An element with this name already exists 
      */
     if (grfMode & STGM_CREATE)
-      Storage32Impl_DestroyElement(This->ancestorStorage, pwcsName); 
+      Storage32Impl_DestroyElement((IStorage32*)This->ancestorStorage, pwcsName); 
     else 
       return STG_E_FILEALREADYEXISTS;
   }
@@ -824,13 +827,13 @@ HRESULT WINAPI Storage32BaseImpl_CreateStream(
 
   if (newStream != 0)
   {
+    *ppstm = (IStream32*)newStream;
+
     /*
      * Since we are returning a pointer to the interface, we have to nail down
      * the reference.
      */
-    StgStreamImpl_AddRef(newStream);
-
-    *ppstm = (IStream32*)newStream;
+    StgStreamImpl_AddRef(*ppstm);
   }
   else
   {
@@ -849,9 +852,10 @@ HRESULT WINAPI Storage32BaseImpl_CreateStream(
  * See Windows documentation for more details on IStorage methods.
  */
 HRESULT WINAPI Storage32BaseImpl_SetClass(
-  Storage32BaseImpl* This,
+  IStorage32*        iface,
   REFCLSID           clsid) /* [in] */
 {
+  ICOM_THIS(Storage32BaseImpl,iface);
   HRESULT hRes = E_FAIL;
   StgProperty curProperty;
   BOOL32 success;
@@ -878,20 +882,22 @@ HRESULT WINAPI Storage32BaseImpl_SetClass(
 */
         
 /************************************************************************
- * Storage32Impl_CreateStorage 
+ * Storage32Impl_CreateStorage (IStorage)
  *
  * This method will create the storage object within the provided storage.
  *
  * See Windows documentation for more details on IStorage methods.
  */
 HRESULT WINAPI Storage32Impl_CreateStorage( 
-  Storage32Impl    *This,
+  IStorage32*      iface,
   const OLECHAR32  *pwcsName, /* [string][in] */ 
   DWORD            grfMode,   /* [in] */ 
   DWORD            reserved1, /* [in] */ 
   DWORD            reserved2, /* [in] */ 
   IStorage32       **ppstg)   /* [out] */ 
 {
+  Storage32Impl* const This=(Storage32Impl*)iface;
+
   IEnumSTATSTGImpl *propertyEnumeration;
   StgProperty      currentProperty;
   StgProperty      newProperty;
@@ -937,7 +943,7 @@ HRESULT WINAPI Storage32Impl_CreateStorage(
      * An element with this name already exists 
      */
     if (grfMode & STGM_CREATE)
-      Storage32Impl_DestroyElement(This->ancestorStorage, pwcsName); 
+      Storage32Impl_DestroyElement((IStorage32*)This->ancestorStorage, pwcsName); 
     else 
       return STG_E_FILEALREADYEXISTS;
   }
@@ -997,7 +1003,7 @@ HRESULT WINAPI Storage32Impl_CreateStorage(
    * Open it to get a pointer to return.
    */
   hr = Storage32BaseImpl_OpenStorage(
-         (Storage32BaseImpl*)This,
+         iface,
          (OLECHAR32*)pwcsName,
          0,
          grfMode,
@@ -1250,8 +1256,11 @@ static void updatePropertyChain(
 }
 
       
+/*************************************************************************
+ * CopyTo (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_CopyTo( 
-  Storage32Impl *This,
+  IStorage32*   iface,
   DWORD         ciidExclude,  /* [in] */ 
   const IID     *rgiidExclude,/* [size_is][unique][in] */ 
   SNB32         snbExclude,   /* [unique][in] */ 
@@ -1260,8 +1269,11 @@ HRESULT WINAPI Storage32Impl_CopyTo(
   return E_NOTIMPL;
 }
         
+/*************************************************************************
+ * MoveElementTo (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_MoveElementTo( 
-  Storage32Impl   *This,
+  IStorage32*     iface,
   const OLECHAR32 *pwcsName,   /* [string][in] */ 
   IStorage32      *pstgDest,   /* [unique][in] */ 
   const OLECHAR32 *pwcsNewName,/* [string][in] */ 
@@ -1270,25 +1282,31 @@ HRESULT WINAPI Storage32Impl_MoveElementTo(
   return E_NOTIMPL;
 }
         
+/*************************************************************************
+ * Commit (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_Commit( 
-  Storage32Impl *This,
+  IStorage32*   iface,
   DWORD         grfCommitFlags)/* [in] */ 
 {
   FIXME(ole, "(%ld): stub!\n", grfCommitFlags);
   return S_OK;
 }
         
+/*************************************************************************
+ * Revert (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_Revert( 
-  Storage32Impl* This)
+  IStorage32* iface)
 {
   return E_NOTIMPL;
 }
 
 /*************************************************************************
- * DestroyElement.
+ * DestroyElement (IStorage)
  *
  * Stategy: This implementation is build this way for simplicity not for speed. 
- *          I allways delete the top most element of the enumeration and adjust
+ *          I always delete the top most element of the enumeration and adjust
  *          the deleted element pointer all the time.  This takes longer to 
  *          do but allow to reinvoke DestroyElement whenever we encounter a 
  *          storage object.  The optimisation reside in the usage of another
@@ -1296,9 +1314,11 @@ HRESULT WINAPI Storage32Impl_Revert(
  *          first. (postfix order)
  */
 HRESULT WINAPI Storage32Impl_DestroyElement( 
-  Storage32Impl   *This,
+  IStorage32*     iface,
   const OLECHAR32 *pwcsName)/* [string][in] */ 
 {
+  Storage32Impl* const This=(Storage32Impl*)iface;
+
   IEnumSTATSTGImpl* propertyEnumeration;
   HRESULT           hr = S_OK;
   BOOL32            res;
@@ -1434,7 +1454,7 @@ static HRESULT deleteStorageProperty(
    * Open the storage and enumerate it
    */
   hr = Storage32BaseImpl_OpenStorage(
-        (Storage32BaseImpl*)parentStorage,
+        (IStorage32*)parentStorage,
         propertyToDeleteName,
         0,
         STGM_SHARE_EXCLUSIVE,
@@ -1461,7 +1481,7 @@ static HRESULT deleteStorageProperty(
     if (hr==S_OK)
     {
       destroyHr = Storage32Impl_DestroyElement(
-                    (Storage32Impl*)childStorage, 
+                    (IStorage32*)childStorage, 
                     (OLECHAR32*)currentElement.pwcsName);
 
       CoTaskMemFree(currentElement.pwcsName);
@@ -1501,7 +1521,7 @@ static HRESULT deleteStreamProperty(
   size.LowPart = 0;
 
   hr = Storage32BaseImpl_OpenStream(
-         (Storage32BaseImpl*)parentStorage,
+         (IStorage32*)parentStorage,
          (OLECHAR32*)propertyToDelete.name,
          NULL,
          STGM_SHARE_EXCLUSIVE,
@@ -1785,8 +1805,11 @@ static HRESULT adjustPropertyChain(
 }
 
 
+/******************************************************************************
+ * SetElementTimes (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_SetElementTimes( 
-  Storage32Impl   *This,
+  IStorage32*     iface,
   const OLECHAR32 *pwcsName,/* [string][in] */ 
   const FILETIME  *pctime,  /* [in] */ 
   const FILETIME  *patime,  /* [in] */ 
@@ -1795,8 +1818,11 @@ HRESULT WINAPI Storage32Impl_SetElementTimes(
   return E_NOTIMPL;
 }
 
+/******************************************************************************
+ * SetStateBits (IStorage)
+ */
 HRESULT WINAPI Storage32Impl_SetStateBits( 
-  Storage32Impl *This,
+  IStorage32*   iface,
   DWORD         grfStateBits,/* [in] */ 
   DWORD         grfMask)     /* [in] */ 
 {
@@ -1821,7 +1847,7 @@ HRESULT Storage32Impl_Construct(
   /*
    * Initialize the virtual fgunction table.
    */
-  This->lpvtbl       = &Storage32Impl_VTable;
+  This->lpvtbl       = &Storage32Impl_Vtbl;
   This->v_destructor = &Storage32Impl_Destroy;
   
   /*
@@ -2743,14 +2769,14 @@ Storage32InternalImpl* Storage32InternalImpl_Construct(
     /*
      * Initialize the virtual function table.
      */
-    newStorage->lpvtbl       = &Storage32InternalImpl_VTable;
+    newStorage->lpvtbl       = &Storage32InternalImpl_Vtbl;
     newStorage->v_destructor = &Storage32InternalImpl_Destroy;
 
     /*
      * Keep the ancestor storage pointer and nail a reference to it.
      */
     newStorage->ancestorStorage = ancestorStorage;
-    Storage32BaseImpl_AddRef((Storage32BaseImpl*)(newStorage->ancestorStorage));
+    Storage32BaseImpl_AddRef((IStorage32*)(newStorage->ancestorStorage));
 
     /*
      * Keep the index of the root property set for this storage,
@@ -2777,7 +2803,7 @@ void Storage32InternalImpl_Destroy(
 ** does nothing.
 */
 HRESULT WINAPI Storage32InternalImpl_Commit( 
-  Storage32InternalImpl* This,
+  IStorage32*            iface,
   DWORD                  grfCommitFlags)  /* [in] */ 
 {
   return S_OK;
@@ -2791,7 +2817,7 @@ HRESULT WINAPI Storage32InternalImpl_Commit(
 ** does nothing.
 */
 HRESULT WINAPI Storage32InternalImpl_Revert( 
-  Storage32InternalImpl* This)
+  IStorage32*            iface)
 {
   return S_OK;
 }
@@ -2821,7 +2847,7 @@ IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
      * enumeration out-lives the storage in the client application.
      */
     newEnumeration->parentStorage = parentStorage;
-    IStorage32_AddRef(newEnumeration->parentStorage);
+    IStorage32_AddRef((IStorage32*)newEnumeration->parentStorage);
     
     newEnumeration->firstPropertyNode   = firstPropertyNode;
     
@@ -2836,7 +2862,7 @@ IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
     /*
      * Make sure the current node of the iterator is the first one.
      */
-    IEnumSTATSTGImpl_Reset(newEnumeration);
+    IEnumSTATSTGImpl_Reset((IEnumSTATSTG*)newEnumeration);
   }
   
   return newEnumeration;
@@ -2844,16 +2870,18 @@ IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
 
 void IEnumSTATSTGImpl_Destroy(IEnumSTATSTGImpl* This)
 {
-  IStorage32_Release(This->parentStorage);
+  IStorage32_Release((IStorage32*)This->parentStorage);
   HeapFree(GetProcessHeap(), 0, This->stackToVisit);
   HeapFree(GetProcessHeap(), 0, This);
 }
 
 HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
-  IEnumSTATSTGImpl* This,
+  IEnumSTATSTG*     iface,
   REFIID            riid,
   void**            ppvObject)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   /*
    * Perform a sanity check on the parameters.
    */
@@ -2887,21 +2915,25 @@ HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
    * Query Interface always increases the reference count by one when it is
    * successful
    */
-  IEnumSTATSTGImpl_AddRef(This);
+  IEnumSTATSTGImpl_AddRef((IEnumSTATSTG*)This);
 
-  return S_OK;;
+  return S_OK;
 }
         
 ULONG   WINAPI IEnumSTATSTGImpl_AddRef(
-  IEnumSTATSTGImpl* This)
+  IEnumSTATSTG* iface)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   This->ref++;
   return This->ref;
 }
         
 ULONG   WINAPI IEnumSTATSTGImpl_Release(
-  IEnumSTATSTGImpl* This)
+  IEnumSTATSTG* iface)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   ULONG newRef;
 
   This->ref--;
@@ -2919,11 +2951,13 @@ ULONG   WINAPI IEnumSTATSTGImpl_Release(
 }
 
 HRESULT WINAPI IEnumSTATSTGImpl_Next(
-  IEnumSTATSTGImpl* This,
+  IEnumSTATSTG* iface,
   ULONG             celt,
   STATSTG*          rgelt,
   ULONG*            pceltFetched)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   StgProperty currentProperty;
   STATSTG*    currentReturnStruct = rgelt;
   ULONG       objectFetched       = 0;
@@ -3000,9 +3034,11 @@ HRESULT WINAPI IEnumSTATSTGImpl_Next(
 
         
 HRESULT WINAPI IEnumSTATSTGImpl_Skip(
-  IEnumSTATSTGImpl* This,
+  IEnumSTATSTG* iface,
   ULONG             celt)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   StgProperty currentProperty;
   ULONG       objectFetched       = 0;
   ULONG       currentSearchNode;
@@ -3050,8 +3086,10 @@ HRESULT WINAPI IEnumSTATSTGImpl_Skip(
 }
         
 HRESULT WINAPI IEnumSTATSTGImpl_Reset(
-  IEnumSTATSTGImpl* This)
+  IEnumSTATSTG* iface)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   StgProperty rootProperty;
   BOOL32      readSucessful;
 
@@ -3082,9 +3120,11 @@ HRESULT WINAPI IEnumSTATSTGImpl_Reset(
 }
         
 HRESULT WINAPI IEnumSTATSTGImpl_Clone(
-  IEnumSTATSTGImpl* This,
+  IEnumSTATSTG* iface,
   IEnumSTATSTG**    ppenum)
 {
+  IEnumSTATSTGImpl* const This=(IEnumSTATSTGImpl*)iface;
+
   IEnumSTATSTGImpl* newClone;
 
   /*
@@ -3111,13 +3151,13 @@ HRESULT WINAPI IEnumSTATSTGImpl_Clone(
     This->stackToVisit, 
     sizeof(ULONG) * newClone->stackSize);
 
+  *ppenum = (IEnumSTATSTG*)newClone;
+
   /*
    * Don't forget to nail down a reference to the clone before
    * returning it.
    */
-  IEnumSTATSTGImpl_AddRef(newClone);
-
-  *ppenum = (IEnumSTATSTG*)newClone;
+  IEnumSTATSTGImpl_AddRef(*ppenum);
 
   return S_OK;
 }
@@ -4609,7 +4649,7 @@ HRESULT WINAPI StgCreateDocfile32(
    * Get an "out" pointer for the caller.
    */
   hr = Storage32BaseImpl_QueryInterface(
-         (Storage32BaseImpl*)newStorage,
+         (IStorage32*)newStorage,
          (REFIID)&IID_IStorage,
          (void**)ppstgOpen);
 
@@ -4690,7 +4730,7 @@ HRESULT WINAPI StgOpenStorage32(
    * Get an "out" pointer for the caller.
    */
   hr = Storage32BaseImpl_QueryInterface(
-         (Storage32BaseImpl*)newStorage,
+         (IStorage32*)newStorage,
          (REFIID)&IID_IStorage,
          (void**)ppstgOpen);
   
diff --git a/ole/storage32.h b/ole/storage32.h
index 6d791202dba..1a196a2b034 100644
--- a/ole/storage32.h
+++ b/ole/storage32.h
@@ -68,16 +68,6 @@ static const ULONG PROPERTY_NULL             = 0xFFFFFFFF;
 #define PROPTYPE_STREAM  0x02
 #define PROPTYPE_ROOT    0x05
 
-/*
- * This define allows me to assign a function to a vtable without having the 
- * nasty warning about incompatible types.
- *
- * This is necessary because of the usage of implementation classes pointers
- * as the first parameter of the interface functions instead of the pointer
- * to the interface
- */
-#define VTABLE_FUNC(a) ((void*)a)
-
 /*
  * These defines assume a hardcoded blocksize. The code will assert
  * if the blocksize is different. Some changes will have to be done if it
@@ -206,18 +196,18 @@ struct Storage32BaseImpl
  * Prototypes for the methods of the Storage32BaseImpl class.
  */
 HRESULT WINAPI Storage32BaseImpl_QueryInterface(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             REFIID             riid,
             void**             ppvObject);
         
 ULONG WINAPI Storage32BaseImpl_AddRef( 
-            Storage32BaseImpl* This);
+            IStorage32*        iface);
         
 ULONG WINAPI Storage32BaseImpl_Release( 
-            Storage32BaseImpl* This);
+            IStorage32*        iface);
         
 HRESULT WINAPI Storage32BaseImpl_OpenStream( 
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsName,  /* [string][in] */
             void*              reserved1, /* [unique][in] */
             DWORD              grfMode,   /* [in] */        
@@ -225,7 +215,7 @@ HRESULT WINAPI Storage32BaseImpl_OpenStream(
             IStream32**        ppstm);    /* [out] */   
     
 HRESULT WINAPI Storage32BaseImpl_OpenStorage( 
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsName,      /* [string][unique][in] */ 
             IStorage32*        pstgPriority,  /* [unique][in] */         
             DWORD              grfMode,       /* [in] */                 
@@ -234,24 +224,24 @@ HRESULT WINAPI Storage32BaseImpl_OpenStorage(
             IStorage32**       ppstg);        /* [out] */                
           
 HRESULT WINAPI Storage32BaseImpl_EnumElements( 
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             DWORD              reserved1, /* [in] */                  
             void*              reserved2, /* [size_is][unique][in] */ 
             DWORD              reserved3, /* [in] */                  
             IEnumSTATSTG**     ppenum);   /* [out] */   
 
 HRESULT WINAPI Storage32BaseImpl_Stat( 
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             STATSTG*           pstatstg,     /* [out] */ 
             DWORD              grfStatFlag); /* [in] */  
 
 HRESULT WINAPI Storage32BaseImpl_RenameElement(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsOldName,  /* [string][in] */
             const OLECHAR32*   pwcsNewName); /* [string][in] */
 
 HRESULT WINAPI Storage32BaseImpl_CreateStream(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             const OLECHAR32*   pwcsName,  /* [string][in] */
             DWORD              grfMode,   /* [in] */
             DWORD              reserved1, /* [in] */
@@ -259,7 +249,7 @@ HRESULT WINAPI Storage32BaseImpl_CreateStream(
             IStream32**        ppstm);    /* [out] */
 
 HRESULT WINAPI Storage32BaseImpl_SetClass(
-            Storage32BaseImpl* This,
+            IStorage32*        iface,
             REFCLSID           clsid);  /* [in] */
 
 /****************************************************************************
@@ -320,7 +310,7 @@ struct Storage32Impl
  */        
 
 HRESULT WINAPI Storage32Impl_CreateStorage( 
-            Storage32Impl*   This,
+            IStorage32*      iface,
             const OLECHAR32* pwcsName,  /* [string][in] */ 
             DWORD            grfMode,   /* [in] */ 
             DWORD            dwStgFmt,  /* [in] */ 
@@ -328,39 +318,39 @@ HRESULT WINAPI Storage32Impl_CreateStorage(
             IStorage32**     ppstg);    /* [out] */ 
         
 HRESULT WINAPI Storage32Impl_CopyTo( 
-            Storage32Impl* This,
+            IStorage32*      iface,
             DWORD          ciidExclude,  /* [in] */ 
             const IID*     rgiidExclude, /* [size_is][unique][in] */ 
             SNB32            snbExclude, /* [unique][in] */ 
             IStorage32*    pstgDest);    /* [unique][in] */ 
         
 HRESULT WINAPI Storage32Impl_MoveElementTo( 
-            Storage32Impl*   This,
+            IStorage32*      iface,
             const OLECHAR32* pwcsName,    /* [string][in] */ 
             IStorage32*      pstgDest,    /* [unique][in] */ 
             const OLECHAR32* pwcsNewName, /* [string][in] */ 
             DWORD            grfFlags);   /* [in] */ 
         
 HRESULT WINAPI Storage32Impl_Commit( 
-            Storage32Impl* This,
+            IStorage32*      iface,
             DWORD          grfCommitFlags); /* [in] */ 
         
 HRESULT WINAPI Storage32Impl_Revert( 
-            Storage32Impl* This);
+            IStorage32*      iface);
         
 HRESULT WINAPI Storage32Impl_DestroyElement( 
-            Storage32Impl*   This,
+            IStorage32*      iface,
             const OLECHAR32* pwcsName); /* [string][in] */ 
         
 HRESULT WINAPI Storage32Impl_SetElementTimes( 
-            Storage32Impl*   This,
+            IStorage32*      iface,
             const OLECHAR32* pwcsName, /* [string][in] */ 
             const FILETIME*  pctime,   /* [in] */ 
             const FILETIME*  patime,   /* [in] */ 
             const FILETIME*  pmtime);  /* [in] */ 
 
 HRESULT WINAPI Storage32Impl_SetStateBits( 
-            Storage32Impl* This,
+            IStorage32*      iface,
             DWORD          grfStateBits, /* [in] */ 
             DWORD          grfMask);     /* [in] */ 
         
@@ -467,11 +457,11 @@ void Storage32InternalImpl_Destroy(
        	    Storage32InternalImpl* This);
 
 HRESULT WINAPI Storage32InternalImpl_Commit( 
-	    Storage32InternalImpl* This,
+	    IStorage32*            iface,
 	    DWORD                  grfCommitFlags); /* [in] */ 
 
 HRESULT WINAPI Storage32InternalImpl_Revert( 
-     	    Storage32InternalImpl* This);
+     	    IStorage32*            iface);
 
 
 /****************************************************************************
@@ -506,31 +496,31 @@ struct IEnumSTATSTGImpl
  * Method definitions for the IEnumSTATSTGImpl class.
  */
 HRESULT WINAPI IEnumSTATSTGImpl_QueryInterface(
-	    IEnumSTATSTGImpl* This,
+	    IEnumSTATSTG*     iface,
 	    REFIID            riid,
 	    void**            ppvObject);
         
 ULONG WINAPI IEnumSTATSTGImpl_AddRef(
-            IEnumSTATSTGImpl* This); 
+            IEnumSTATSTG*     iface); 
         
 ULONG WINAPI IEnumSTATSTGImpl_Release(
-            IEnumSTATSTGImpl* This);
+            IEnumSTATSTG*     iface);
         
 HRESULT WINAPI IEnumSTATSTGImpl_Next(
-            IEnumSTATSTGImpl* This,
+            IEnumSTATSTG*     iface,
 	    ULONG             celt,
 	    STATSTG*          rgelt,
 	    ULONG*            pceltFetched);
         
 HRESULT WINAPI IEnumSTATSTGImpl_Skip(
-            IEnumSTATSTGImpl* This,
+            IEnumSTATSTG*     iface,
 	    ULONG             celt);
         
 HRESULT WINAPI IEnumSTATSTGImpl_Reset(
-            IEnumSTATSTGImpl* This);
+            IEnumSTATSTG* iface);
         
 HRESULT WINAPI IEnumSTATSTGImpl_Clone(
-            IEnumSTATSTGImpl* This,
+            IEnumSTATSTG*     iface,
 	    IEnumSTATSTG**    ppenum);
 
 IEnumSTATSTGImpl* IEnumSTATSTGImpl_Construct(
@@ -620,71 +610,71 @@ void StgStreamImpl_OpenBlockChain(
                 StgStreamImpl* This);
 
 HRESULT WINAPI StgStreamImpl_QueryInterface(
-		StgStreamImpl* This,
+		IStream32*      iface,
 		REFIID         riid,		/* [in] */          
 		void**         ppvObject);  /* [iid_is][out] */ 
         
 ULONG WINAPI StgStreamImpl_AddRef(
-		StgStreamImpl* This);
+		IStream32*      iface);
         
 ULONG WINAPI StgStreamImpl_Release(
-		StgStreamImpl* This);
+		IStream32*      iface);
         
 HRESULT WINAPI StgStreamImpl_Read( 
-	        StgStreamImpl* This,
+	        IStream32*      iface,
 		void*          pv,        /* [length_is][size_is][out] */
 		ULONG          cb,        /* [in] */                     
 		ULONG*         pcbRead);  /* [out] */                    
         
 HRESULT WINAPI StgStreamImpl_Write(
-		StgStreamImpl* This,
+		IStream32*      iface,
 		const void*    pv,          /* [size_is][in] */ 
 		ULONG          cb,          /* [in] */          
 		ULONG*         pcbWritten); /* [out] */         
         
 HRESULT WINAPI StgStreamImpl_Seek( 
-		StgStreamImpl*  This,
+		IStream32*      iface,
 		LARGE_INTEGER   dlibMove,         /* [in] */ 
 		DWORD           dwOrigin,         /* [in] */ 
 		ULARGE_INTEGER* plibNewPosition); /* [out] */
         
 HRESULT WINAPI StgStreamImpl_SetSize( 
-		StgStreamImpl*  This,
+	        IStream32*      iface,
 		ULARGE_INTEGER  libNewSize);  /* [in] */ 
         
 HRESULT WINAPI StgStreamImpl_CopyTo( 
-		StgStreamImpl*  This,
+		IStream32*      iface,
 		IStream32*      pstm,         /* [unique][in] */ 
 		ULARGE_INTEGER  cb,           /* [in] */         
 		ULARGE_INTEGER* pcbRead,      /* [out] */        
 		ULARGE_INTEGER* pcbWritten);  /* [out] */        
 
 HRESULT WINAPI StgStreamImpl_Commit( 
-	    	StgStreamImpl*  This,
+	    	IStream32*      iface,
 		DWORD           grfCommitFlags); /* [in] */ 
         
 HRESULT WINAPI StgStreamImpl_Revert( 
-		StgStreamImpl*  This);
+		IStream32*  iface);
         
 HRESULT WINAPI StgStreamImpl_LockRegion( 
-		StgStreamImpl*  This,
+		IStream32*     iface,
 		ULARGE_INTEGER libOffset,   /* [in] */ 
 		ULARGE_INTEGER cb,          /* [in] */ 
 		DWORD          dwLockType); /* [in] */ 
         
 HRESULT WINAPI StgStreamImpl_UnlockRegion( 
-		StgStreamImpl* This,
+		IStream32*     iface,
 		ULARGE_INTEGER libOffset,   /* [in] */ 
 	        ULARGE_INTEGER cb,          /* [in] */ 
 		DWORD          dwLockType); /* [in] */ 
         
 HRESULT WINAPI StgStreamImpl_Stat( 
-		StgStreamImpl* This,
+		IStream32*     iface,
 	        STATSTG*       pstatstg,     /* [out] */
 	        DWORD          grfStatFlag); /* [in] */ 
         
 HRESULT WINAPI StgStreamImpl_Clone( 
-		StgStreamImpl* This,
+		IStream32*     iface,
 		IStream32**    ppstm);       /* [out] */ 
 
 
-- 
GitLab