From 2305f3c06d436d602805c16fcbbbcc20ebd1188a Mon Sep 17 00:00:00 2001 From: Paul Quinn Date: Sat, 22 May 1999 11:41:38 +0000 Subject: [PATCH] Microsoft com vtable compatibility workaround for g++. Basically adds an optional 8 bytes padding to COM objects where the RTTI would be. --- dlls/avifil32/avifile.c | 2 + dlls/shell32/contmenu.c | 1 + dlls/shell32/dataobject.c | 2 + dlls/shell32/enumidlist.c | 4 +- dlls/shell32/folders.c | 5 +- dlls/shell32/regstream.c | 1 + dlls/shell32/shelllink.c | 11 +- dlls/shell32/shellole.c | 1 + dlls/shell32/shlfolder.c | 6 +- dlls/shell32/shlview.c | 7 +- graphics/d3ddevices.c | 8 +- graphics/d3dexecutebuffer.c | 4 +- graphics/d3dlight.c | 4 +- graphics/d3dmaterial.c | 8 +- graphics/d3dtexture.c | 8 +- graphics/d3dviewport.c | 4 +- graphics/ddraw.c | 56 +++++-- include/wine/obj_base.h | 322 ++++++++++-------------------------- multimedia/dplay.c | 32 +++- multimedia/dsound.c | 20 ++- ole/antimoniker.c | 2 + ole/bindctx.c | 1 + ole/compositemoniker.c | 3 + ole/datacache.c | 6 + ole/defaulthandler.c | 4 + ole/filemoniker.c | 2 + ole/hglobalstream.c | 1 + ole/ifs.c | 8 +- ole/itemmoniker.c | 2 + ole/memlockbytes.c | 1 + ole/moniker.c | 1 + ole/olefont.c | 3 + ole/oleobj.c | 1 + ole/stg_stream.c | 1 + ole/storage32.c | 3 + windows/dinput.c | 12 +- 36 files changed, 277 insertions(+), 280 deletions(-) diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c index b1220bcec8a..3dbc987e566 100644 --- a/dlls/avifil32/avifile.c +++ b/dlls/avifil32/avifile.c @@ -152,6 +152,7 @@ static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile*iface,DWORD fccType,LONG } struct ICOM_VTABLE(IAVIFile) iavift = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IAVIFile_fnQueryInterface, IAVIFile_fnAddRef, IAVIFile_fnRelease, @@ -330,6 +331,7 @@ HRESULT WINAPI IAVIStream_fnSetInfo(IAVIStream*iface,AVISTREAMINFOW*info,LONG in } struct ICOM_VTABLE(IAVIStream) iavist = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IAVIStream_fnQueryInterface, IAVIStream_fnAddRef, IAVIStream_fnRelease, diff --git a/dlls/shell32/contmenu.c b/dlls/shell32/contmenu.c index 861d008ea95..df46fbd4428 100644 --- a/dlls/shell32/contmenu.c +++ b/dlls/shell32/contmenu.c @@ -455,6 +455,7 @@ static HRESULT WINAPI IContextMenu_fnHandleMenuMsg( */ static struct ICOM_VTABLE(IContextMenu) cmvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IContextMenu_fnQueryInterface, IContextMenu_fnAddRef, IContextMenu_fnRelease, diff --git a/dlls/shell32/dataobject.c b/dlls/shell32/dataobject.c index 5c9e7587d57..e101244c833 100644 --- a/dlls/shell32/dataobject.c +++ b/dlls/shell32/dataobject.c @@ -43,6 +43,7 @@ static HRESULT WINAPI IEnumFORMATETC_fnClone(LPENUMFORMATETC iface, LPENUMFORMAT static struct ICOM_VTABLE(IEnumFORMATETC) efvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IEnumFORMATETC_fnQueryInterface, IEnumFORMATETC_fnAddRef, IEnumFORMATETC_fnRelease, @@ -363,6 +364,7 @@ static HRESULT WINAPI IDataObject_fnEnumDAdvise(LPDATAOBJECT iface, IEnumSTATDAT static struct ICOM_VTABLE(IDataObject) dtovt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDataObject_fnQueryInterface, IDataObject_fnAddRef, IDataObject_fnRelease, diff --git a/dlls/shell32/enumidlist.c b/dlls/shell32/enumidlist.c index 2d8d8d3983d..eca48cb79f7 100644 --- a/dlls/shell32/enumidlist.c +++ b/dlls/shell32/enumidlist.c @@ -401,7 +401,9 @@ static BOOL WINAPI IEnumIDList_fnDeleteList( * IEnumIDList_fnVTable */ static ICOM_VTABLE (IEnumIDList) eidlvt = -{ IEnumIDList_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IEnumIDList_fnQueryInterface, IEnumIDList_fnAddRef, IEnumIDList_fnRelease, IEnumIDList_fnNext, diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c index 02aacbc3411..cb524eefb88 100644 --- a/dlls/shell32/folders.c +++ b/dlls/shell32/folders.c @@ -217,7 +217,9 @@ static HRESULT WINAPI IExtractIconA_fnExtract(IExtractIconA * iface, LPCSTR pszF } static struct ICOM_VTABLE(IExtractIconA) eivt = -{ IExtractIconA_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IExtractIconA_fnQueryInterface, IExtractIconA_fnAddRef, IExtractIconA_fnRelease, IExtractIconA_fnGetIconLocation, @@ -289,6 +291,7 @@ static HRESULT WINAPI IEIPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFi static struct ICOM_VTABLE(IPersistFile) pfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IEIPersistFile_fnQueryInterface, IEIPersistFile_fnAddRef, IEIPersistFile_fnRelease, diff --git a/dlls/shell32/regstream.c b/dlls/shell32/regstream.c index 67aeb8a7b0c..68dab92e760 100644 --- a/dlls/shell32/regstream.c +++ b/dlls/shell32/regstream.c @@ -249,6 +249,7 @@ HRESULT WINAPI IStream_fnClone (IStream * iface, IStream** ppstm) static struct ICOM_VTABLE(IStream) rstvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IStream_fnQueryInterface, IStream_fnAddRef, IStream_fnRelease, diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c index 1cde64c9453..fca690e2fa4 100644 --- a/dlls/shell32/shelllink.c +++ b/dlls/shell32/shelllink.c @@ -246,6 +246,7 @@ static HRESULT WINAPI IPersistFile_fnGetCurFile(const IPersistFile* iface, LPOLE static struct ICOM_VTABLE(IPersistFile) pfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IPersistFile_fnQueryInterface, IPersistFile_fnAddRef, IPersistFile_fnRelease, @@ -389,6 +390,7 @@ static HRESULT WINAPI IShellLink_CF_LockServer(IClassFactory* iface, BOOL fLock) } static ICOM_VTABLE(IClassFactory) slcfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IShellLink_CF_QueryInterface, IShellLink_CF_AddRef, IShellLink_CF_Release, @@ -636,7 +638,9 @@ static HRESULT WINAPI IShellLink_fnSetPath(IShellLink * iface, LPCSTR pszFile) */ static ICOM_VTABLE(IShellLink) slvt = -{ IShellLink_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IShellLink_fnQueryInterface, IShellLink_fnAddRef, IShellLink_fnRelease, IShellLink_fnGetPath, @@ -786,6 +790,7 @@ static HRESULT WINAPI IShellLinkW_CF_LockServer(LPCLASSFACTORY iface, BOOL fLock static ICOM_VTABLE(IClassFactory) slwcfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IShellLinkW_CF_QueryInterface, IShellLinkW_CF_AddRef, IShellLinkW_CF_Release, @@ -1049,7 +1054,9 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile */ static ICOM_VTABLE(IShellLinkW) slvtw = -{ IShellLinkW_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IShellLinkW_fnQueryInterface, IShellLinkW_fnAddRef, IShellLinkW_fnRelease, IShellLinkW_fnGetPath, diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c index cdcea4ab0f5..ec67460f0d1 100644 --- a/dlls/shell32/shellole.c +++ b/dlls/shell32/shellole.c @@ -371,6 +371,7 @@ static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface, BOOL fLoc static ICOM_VTABLE(IClassFactory) clfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IClassFactory_fnQueryInterface, IClassFactory_fnAddRef, IClassFactory_fnRelease, diff --git a/dlls/shell32/shlfolder.c b/dlls/shell32/shlfolder.c index 7eaf94e02f5..1cb591c67c9 100644 --- a/dlls/shell32/shlfolder.c +++ b/dlls/shell32/shlfolder.c @@ -167,6 +167,7 @@ static HRESULT WINAPI ISFDropTarget_Drop( static struct ICOM_VTABLE(IDropTarget) dtvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ISFDropTarget_QueryInterface, ISFDropTarget_AddRef, ISFDropTarget_Release, @@ -965,7 +966,9 @@ static HRESULT WINAPI IShellFolder_fnGetFolderPath(IShellFolder * iface, LPSTR l } static ICOM_VTABLE(IShellFolder) sfvt = -{ IShellFolder_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IShellFolder_fnQueryInterface, IShellFolder_fnAddRef, IShellFolder_fnRelease, IShellFolder_fnParseDisplayName, @@ -1067,6 +1070,7 @@ static HRESULT WINAPI ISFPersistFolder_Initialize( static ICOM_VTABLE(IPersistFolder) psfvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ISFPersistFolder_QueryInterface, ISFPersistFolder_AddRef, ISFPersistFolder_Release, diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index 366c2305702..dc934a8ef18 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -1507,7 +1507,9 @@ static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, } static struct ICOM_VTABLE(IShellView) svvt = -{ IShellView_fnQueryInterface, +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IShellView_fnQueryInterface, IShellView_fnAddRef, IShellView_fnRelease, IShellView_fnGetWindow, @@ -1596,6 +1598,7 @@ static HRESULT WINAPI ISVOleCmdTarget_Exec( static ICOM_VTABLE(IOleCommandTarget) ctvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ISVOleCmdTarget_QueryInterface, ISVOleCmdTarget_AddRef, ISVOleCmdTarget_Release, @@ -1695,6 +1698,7 @@ static HRESULT WINAPI ISVDropTarget_Drop( static struct ICOM_VTABLE(IDropTarget) dtvt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ISVDropTarget_QueryInterface, ISVDropTarget_AddRef, ISVDropTarget_Release, @@ -1833,6 +1837,7 @@ static HRESULT WINAPI ISVViewObject_GetAdvise( static struct ICOM_VTABLE(IViewObject) vovt = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ISVViewObject_QueryInterface, ISVViewObject_AddRef, ISVViewObject_Release, diff --git a/graphics/d3ddevices.c b/graphics/d3ddevices.c index 35aafe71f21..d5c9c67b377 100644 --- a/graphics/d3ddevices.c +++ b/graphics/d3ddevices.c @@ -1157,7 +1157,9 @@ static HRESULT WINAPI IDirect3DDevice2Impl_GetClipStatus(LPDIRECT3DDEVICE2 iface * OpenGL-specific VTable */ -static ICOM_VTABLE(IDirect3DDevice2) OpenGL_vtable = { +static ICOM_VTABLE(IDirect3DDevice2) OpenGL_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirect3DDevice2Impl_QueryInterface, IDirect3DDevice2Impl_AddRef, IDirect3DDevice2Impl_Release, @@ -1674,7 +1676,9 @@ static HRESULT WINAPI IDirect3DDeviceImpl_GetDirect3D(LPDIRECT3DDEVICE iface, /******************************************************************************* * Direct3DDevice VTable */ -static ICOM_VTABLE(IDirect3DDevice) OpenGL_vtable_dx3 = { +static ICOM_VTABLE(IDirect3DDevice) OpenGL_vtable_dx3 = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirect3DDeviceImpl_QueryInterface, IDirect3DDeviceImpl_AddRef, IDirect3DDeviceImpl_Release, diff --git a/graphics/d3dexecutebuffer.c b/graphics/d3dexecutebuffer.c index 7db3e23fcab..2bb00e0220e 100644 --- a/graphics/d3dexecutebuffer.c +++ b/graphics/d3dexecutebuffer.c @@ -843,7 +843,9 @@ static HRESULT WINAPI IDirect3DExecuteBufferImpl_Optimize(LPDIRECT3DEXECUTEBUFFE /******************************************************************************* * IDirect3DLight VTable */ -static ICOM_VTABLE(IDirect3DExecuteBuffer) executebuffer_vtable = { +static ICOM_VTABLE(IDirect3DExecuteBuffer) executebuffer_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DExecuteBufferImpl_QueryInterface, IDirect3DExecuteBufferImpl_AddRef, diff --git a/graphics/d3dlight.c b/graphics/d3dlight.c index 9006ea7ae1f..2ea2431067c 100644 --- a/graphics/d3dlight.c +++ b/graphics/d3dlight.c @@ -244,7 +244,9 @@ static HRESULT WINAPI IDirect3DLightImpl_Initialize(LPDIRECT3DLIGHT iface, /******************************************************************************* * IDirect3DLight VTable */ -static ICOM_VTABLE(IDirect3DLight) light_vtable = { +static ICOM_VTABLE(IDirect3DLight) light_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DLightImpl_QueryInterface, IDirect3DLightImpl_AddRef, diff --git a/graphics/d3dmaterial.c b/graphics/d3dmaterial.c index e01cb710f4a..37ca54f7377 100644 --- a/graphics/d3dmaterial.c +++ b/graphics/d3dmaterial.c @@ -220,7 +220,9 @@ static HRESULT WINAPI IDirect3DMaterialImpl_Initialize(LPDIRECT3DMATERIAL iface, /******************************************************************************* * IDirect3DMaterial VTable */ -static ICOM_VTABLE(IDirect3DMaterial) material_vtable = { +static ICOM_VTABLE(IDirect3DMaterial) material_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DMaterial2Impl_QueryInterface, IDirect3DMaterial2Impl_AddRef, @@ -238,7 +240,9 @@ static ICOM_VTABLE(IDirect3DMaterial) material_vtable = { /******************************************************************************* * IDirect3DMaterial2 VTable */ -static ICOM_VTABLE(IDirect3DMaterial2) material2_vtable = { +static ICOM_VTABLE(IDirect3DMaterial2) material2_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DMaterial2Impl_QueryInterface, IDirect3DMaterial2Impl_AddRef, diff --git a/graphics/d3dtexture.c b/graphics/d3dtexture.c index 4f11891f016..be8192d7c57 100644 --- a/graphics/d3dtexture.c +++ b/graphics/d3dtexture.c @@ -528,7 +528,9 @@ static HRESULT WINAPI IDirect3DTexture2Impl_Load(LPDIRECT3DTEXTURE2 iface, /******************************************************************************* * IDirect3DTexture2 VTable */ -static ICOM_VTABLE(IDirect3DTexture2) texture2_vtable = { +static ICOM_VTABLE(IDirect3DTexture2) texture2_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DTexture2Impl_QueryInterface, IDirect3DTexture2Impl_AddRef, @@ -542,7 +544,9 @@ static ICOM_VTABLE(IDirect3DTexture2) texture2_vtable = { /******************************************************************************* * IDirect3DTexture VTable */ -static ICOM_VTABLE(IDirect3DTexture) texture_vtable = { +static ICOM_VTABLE(IDirect3DTexture) texture_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DTexture2Impl_QueryInterface, IDirect3DTexture2Impl_AddRef, diff --git a/graphics/d3dviewport.c b/graphics/d3dviewport.c index f11cefebf66..2746b540865 100644 --- a/graphics/d3dviewport.c +++ b/graphics/d3dviewport.c @@ -348,7 +348,9 @@ static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport2(LPDIRECT3DVIEWPORT2 if /******************************************************************************* * IDirect3DViewport1/2 VTable */ -static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable = { +static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /*** IUnknown methods ***/ IDirect3DViewport2Impl_QueryInterface, IDirect3DViewport2Impl_AddRef, diff --git a/graphics/ddraw.c b/graphics/ddraw.c index 28eb30e822f..a226f11542a 100644 --- a/graphics/ddraw.c +++ b/graphics/ddraw.c @@ -1791,7 +1791,9 @@ static HRESULT WINAPI IDirectDrawSurface4Impl_ChangeUniquenessValue(LPDIRECTDRAW return DD_OK; } -static ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt = { +static ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawSurface4Impl_QueryInterface, IDirectDrawSurface4Impl_AddRef, DGA_IDirectDrawSurface4Impl_Release, @@ -1839,7 +1841,9 @@ static ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt = { IDirectDrawSurface4Impl_ChangeUniquenessValue }; -static ICOM_VTABLE(IDirectDrawSurface4) xlib_dds4vt = { +static ICOM_VTABLE(IDirectDrawSurface4) xlib_dds4vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawSurface4Impl_QueryInterface, IDirectDrawSurface4Impl_AddRef, Xlib_IDirectDrawSurface4Impl_Release, @@ -1988,7 +1992,9 @@ static HRESULT WINAPI IDirectDrawClipperImpl_IsClipListChanged( return DD_OK; } -static ICOM_VTABLE(IDirectDrawClipper) ddclipvt = { +static ICOM_VTABLE(IDirectDrawClipper) ddclipvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawClipperImpl_QueryInterface, IDirectDrawClipperImpl_AddRef, IDirectDrawClipperImpl_Release, @@ -2155,7 +2161,9 @@ static HRESULT WINAPI IDirectDrawPaletteImpl_QueryInterface( return S_OK; } -static ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = { +static ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawPaletteImpl_QueryInterface, IDirectDrawPaletteImpl_AddRef, IDirectDrawPaletteImpl_Release, @@ -2165,7 +2173,9 @@ static ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = { DGA_IDirectDrawPaletteImpl_SetEntries }; -static ICOM_VTABLE(IDirectDrawPalette) xlib_ddpalvt = { +static ICOM_VTABLE(IDirectDrawPalette) xlib_ddpalvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawPaletteImpl_QueryInterface, IDirectDrawPaletteImpl_AddRef, IDirectDrawPaletteImpl_Release, @@ -2319,7 +2329,9 @@ static HRESULT WINAPI IDirect3DImpl_FindDevice(LPDIRECT3D iface, return DD_OK; } -static ICOM_VTABLE(IDirect3D) d3dvt = { +static ICOM_VTABLE(IDirect3D) d3dvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirect3DImpl_QueryInterface, IDirect3DImpl_AddRef, IDirect3DImpl_Release, @@ -2480,7 +2492,9 @@ static HRESULT WINAPI IDirect3D2Impl_CreateDevice(LPDIRECT3D2 iface, return DDERR_INVALIDPARAMS; } -static ICOM_VTABLE(IDirect3D2) d3d2vt = { +static ICOM_VTABLE(IDirect3D2) d3d2vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirect3D2Impl_QueryInterface, IDirect3D2Impl_AddRef, IDirect3D2Impl_Release, @@ -4098,7 +4112,9 @@ static HRESULT WINAPI IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, # define XCAST(fun) (void *) #endif -static ICOM_VTABLE(IDirectDraw) dga_ddvt = { +static ICOM_VTABLE(IDirectDraw) dga_ddvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE XCAST(QueryInterface)DGA_IDirectDraw2Impl_QueryInterface, XCAST(AddRef)IDirectDraw2Impl_AddRef, XCAST(Release)DGA_IDirectDraw2Impl_Release, @@ -4124,7 +4140,9 @@ static ICOM_VTABLE(IDirectDraw) dga_ddvt = { XCAST(WaitForVerticalBlank)IDirectDraw2Impl_WaitForVerticalBlank, }; -static ICOM_VTABLE(IDirectDraw) xlib_ddvt = { +static ICOM_VTABLE(IDirectDraw) xlib_ddvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE XCAST(QueryInterface)Xlib_IDirectDraw2Impl_QueryInterface, XCAST(AddRef)IDirectDraw2Impl_AddRef, XCAST(Release)Xlib_IDirectDraw2Impl_Release, @@ -4194,7 +4212,9 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_GetAvailableVidMem( return DD_OK; } -static ICOM_VTABLE(IDirectDraw2) dga_dd2vt = { +static ICOM_VTABLE(IDirectDraw2) dga_dd2vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DGA_IDirectDraw2Impl_QueryInterface, IDirectDraw2Impl_AddRef, DGA_IDirectDraw2Impl_Release, @@ -4221,7 +4241,9 @@ static ICOM_VTABLE(IDirectDraw2) dga_dd2vt = { DGA_IDirectDraw2Impl_GetAvailableVidMem }; -static ICOM_VTABLE(IDirectDraw2) xlib_dd2vt = { +static ICOM_VTABLE(IDirectDraw2) xlib_dd2vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE Xlib_IDirectDraw2Impl_QueryInterface, IDirectDraw2Impl_AddRef, Xlib_IDirectDraw2Impl_Release, @@ -4292,7 +4314,9 @@ static HRESULT WINAPI IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 iface, #endif -static ICOM_VTABLE(IDirectDraw4) dga_dd4vt = { +static ICOM_VTABLE(IDirectDraw4) dga_dd4vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE XCAST(QueryInterface)DGA_IDirectDraw2Impl_QueryInterface, XCAST(AddRef)IDirectDraw2Impl_AddRef, XCAST(Release)DGA_IDirectDraw2Impl_Release, @@ -4323,7 +4347,9 @@ static ICOM_VTABLE(IDirectDraw4) dga_dd4vt = { IDirectDraw4Impl_GetDeviceIdentifier }; -static ICOM_VTABLE(IDirectDraw4) xlib_dd4vt = { +static ICOM_VTABLE(IDirectDraw4) xlib_dd4vt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE XCAST(QueryInterface)Xlib_IDirectDraw2Impl_QueryInterface, XCAST(AddRef)IDirectDraw2Impl_AddRef, XCAST(Release)Xlib_IDirectDraw2Impl_Release, @@ -4719,7 +4745,9 @@ static HRESULT WINAPI DDCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { return S_OK; } -static ICOM_VTABLE(IClassFactory) DDCF_Vtbl = { +static ICOM_VTABLE(IClassFactory) DDCF_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DDCF_QueryInterface, DDCF_AddRef, DDCF_Release, diff --git a/include/wine/obj_base.h b/include/wine/obj_base.h index 595dc76ef6a..d09a0d18af3 100644 --- a/include/wine/obj_base.h +++ b/include/wine/obj_base.h @@ -6,6 +6,21 @@ #ifndef __WINE_WINE_OBJ_BASE_H #define __WINE_WINE_OBJ_BASE_H +/***************************************************************************** + * define ICOM_MSVTABLE_COMPAT + * to implement the microsoft com vtable compatibility workaround for g++. + * + * NOTE: Turning this option on will produce a winelib that is incompatible + * with the binary emulator. + * + * If the compiler supports the com_interface attribute, leave this off, and + * define the ICOM_USE_COM_INTERFACE_ATTRIBUTE macro below. + * + * If you aren't interested in WineLib C++ compatability at all, leave both + * options off. + */ +/* #define ICOM_MSVTABLE_COMPAT 1 */ +/* #define ICOM_USE_COM_INTERFACE_ATTRIBUTE 1 */ /***************************************************************************** * Defines the basic types @@ -13,6 +28,9 @@ #include "wtypes.h" +#define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v)) +#define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v)) + /***************************************************************************** * Macros to declare the GUIDs */ @@ -312,302 +330,139 @@ inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) #ifndef ICOM_CINTERFACE /* C++ interface */ -#ifndef ICOM_VIRTUAL_METHODS -/* Uses these macros, i.e. do not define ICOM_VIRTUAL_METHODS, if your C++ compiler does not generate - * virtual tables with the right layout (i.e. currently most g++ derivatives). - */ - #define ICOM_METHOD(ret,xfn) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me); \ - public: inline ret (CALLBACK xfn)(void) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); }; + public: virtual ret (CALLBACK xfn)(void) = 0; #define ICOM_METHOD1(ret,xfn,ta,na) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a); \ - public: inline ret (CALLBACK xfn)(ta a) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); }; + public: virtual ret (CALLBACK xfn)(ta a) = 0; #define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b); \ - public: inline ret (CALLBACK xfn)(ta a,tb b) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b) = 0; #define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c) = 0; #define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d) = 0; #define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) = 0; #define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) = 0; #define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) = 0; #define ICOM_METHOD8(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) = 0; #define ICOM_METHOD9(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh,ti,ni) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h,i); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i) = 0; #define ICOM_METHOD10(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh,ti,ni,tj,nj) \ - private: ret (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i,tj j); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i,tj j) { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h,i,j); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i,tj j) = 0; #define ICOM_CMETHOD(ret,xfn) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me); \ - public: inline ret (CALLBACK xfn)(void) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); }; + public: virtual ret (CALLBACK xfn)(void) const = 0; #define ICOM_CMETHOD1(ret,xfn,ta,na) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a); \ - public: inline ret (CALLBACK xfn)(ta a) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); }; + public: virtual ret (CALLBACK xfn)(ta a) const = 0; #define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b); \ - public: inline ret (CALLBACK xfn)(ta a,tb b) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b) const = 0; #define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c) const = 0; #define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d) const = 0; #define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const = 0; #define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const = 0; #define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const = 0; #define ICOM_CMETHOD8(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - private: ret (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h); \ - public: inline ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const { return ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h); }; + public: virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const = 0; #define ICOM_VMETHOD(xfn) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me); \ - public: inline void (CALLBACK xfn)(void) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); }; + public: virtual void (CALLBACK xfn)(void) = 0; #define ICOM_VMETHOD1(xfn,ta,na) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a); \ - public: inline void (CALLBACK xfn)(ta a) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); }; + public: virtual void (CALLBACK xfn)(ta a) = 0; #define ICOM_VMETHOD2(xfn,ta,na,tb,nb) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b); \ - public: inline void (CALLBACK xfn)(ta a,tb b) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); }; + public: virtual void (CALLBACK xfn)(ta a,tb b) = 0; #define ICOM_VMETHOD3(xfn,ta,na,tb,nb,tc,nc) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c) = 0; #define ICOM_VMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d) = 0; #define ICOM_VMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) = 0; #define ICOM_VMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) = 0; #define ICOM_VMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) = 0; #define ICOM_VMETHOD8(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - private: void (CALLBACK *fn##xfn)(ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) = 0; #define ICOM_CVMETHOD(xfn) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me); \ - public: inline void (CALLBACK xfn)(void) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this); }; + public: virtual void (CALLBACK xfn)(void) const = 0; #define ICOM_CVMETHOD1(xfn,ta,na) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a); \ - public: inline void (CALLBACK xfn)(ta a) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a); }; + public: virtual void (CALLBACK xfn)(ta a) const = 0; #define ICOM_CVMETHOD2(xfn,ta,na,tb,nb) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b); \ - public: inline void (CALLBACK xfn)(ta a,tb b) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b); }; + public: virtual void (CALLBACK xfn)(ta a,tb b) const = 0; #define ICOM_CVMETHOD3(xfn,ta,na,tb,nb,tc,nc) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c) const = 0; #define ICOM_CVMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d) const = 0; #define ICOM_CVMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const = 0; #define ICOM_CVMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const = 0; #define ICOM_CVMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const = 0; #define ICOM_CVMETHOD8(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - private: void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h); \ - public: inline void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const { ((ICOM_INTERFACE*)t.lpvtbl)->fn##xfn(this,a,b,c,d,e,f,g,h); }; + public: virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const = 0; +#ifdef ICOM_USE_COM_INTERFACE_ATTRIBUTE #define ICOM_DEFINE(iface,ibase) \ typedef struct iface: public ibase { \ iface##_METHODS \ - }; + } __attribute__ ((com_interface)); #else -/* This case can be used if the layout of the virtual tables generated by the C++ - * compiler matches that of Visual C++. - */ - -#define ICOM_METHOD(ret,xfn) \ - virtual ret (CALLBACK xfn)(void) = 0; - -#define ICOM_METHOD1(ret,xfn,ta,na) \ - virtual ret (CALLBACK xfn)(ta a) = 0; - -#define ICOM_METHOD2(ret,xfn,ta,na,tb,nb) \ - virtual ret (CALLBACK xfn)(ta a,tb b) = 0; - -#define ICOM_METHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c) = 0; - -#define ICOM_METHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d) = 0; - -#define ICOM_METHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) = 0; - -#define ICOM_METHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) = 0; - -#define ICOM_METHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) = 0; - -#define ICOM_METHOD8(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) = 0; - -#define ICOM_METHOD9(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh,ti,ni) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i) = 0; - -#define ICOM_METHOD10(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh,ti,ni,tj,nj) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h,ti i,tj j) = 0; - - -#define ICOM_CMETHOD(ret,xfn) \ - virtual ret (CALLBACK xfn)(void) const = 0; - -#define ICOM_CMETHOD1(ret,xfn,ta,na) \ - virtual ret (CALLBACK xfn)(ta a) const = 0; - -#define ICOM_CMETHOD2(ret,xfn,ta,na,tb,nb) \ - virtual ret (CALLBACK xfn)(ta a,tb b) const = 0; - -#define ICOM_CMETHOD3(ret,xfn,ta,na,tb,nb,tc,nc) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c) const = 0; - -#define ICOM_CMETHOD4(ret,xfn,ta,na,tb,nb,tc,nc,td,nd) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d) const = 0; - -#define ICOM_CMETHOD5(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const = 0; - -#define ICOM_CMETHOD6(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const = 0; - -#define ICOM_CMETHOD7(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const = 0; - -#define ICOM_CMETHOD8(ret,xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - virtual ret (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const = 0; - - -#define ICOM_VMETHOD(xfn) \ - virtual void (CALLBACK xfn)(void) = 0; - -#define ICOM_VMETHOD1(xfn,ta,na) \ - virtual void (CALLBACK xfn)(ta a) = 0; - -#define ICOM_VMETHOD2(xfn,ta,na,tb,nb) \ - virtual void (CALLBACK xfn)(ta a,tb b) = 0; - -#define ICOM_VMETHOD3(xfn,ta,na,tb,nb,tc,nc) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c) = 0; - -#define ICOM_VMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d) = 0; - -#define ICOM_VMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) = 0; - -#define ICOM_VMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) = 0; - -#define ICOM_VMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) = 0; - -#define ICOM_VMETHOD8(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) = 0; - - -#define ICOM_CVMETHOD(xfn) \ - virtual void (CALLBACK xfn)(void) const = 0; - -#define ICOM_CVMETHOD1(xfn,ta,na) \ - virtual void (CALLBACK xfn)(ta a) const = 0; - -#define ICOM_CVMETHOD2(xfn,ta,na,tb,nb) \ - virtual void (CALLBACK xfn)(ta a,tb b) const = 0; - -#define ICOM_CVMETHOD3(xfn,ta,na,tb,nb,tc,nc) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c) const = 0; - -#define ICOM_CVMETHOD4(xfn,ta,na,tb,nb,tc,nc,td,nd) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d) const = 0; - -#define ICOM_CVMETHOD5(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e) const = 0; - -#define ICOM_CVMETHOD6(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f) const = 0; - -#define ICOM_CVMETHOD7(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g) const = 0; - -#define ICOM_CVMETHOD8(xfn,ta,na,tb,nb,tc,nc,td,nd,te,ne,tf,nf,tg,ng,th,nh) \ - virtual void (CALLBACK xfn)(ta a,tb b,tc c,td d,te e,tf f,tg g,th h) const = 0; - -#endif - #define ICOM_DEFINE(iface,ibase) \ typedef struct iface: public ibase { \ iface##_METHODS \ }; +#endif /* ICOM_USE_COM_INTERFACE_ATTRIBUTE */ + #define ICOM_CALL(xfn, p) this_is_a_syntax_error #define ICOM_CALL1(xfn, p,a) this_is_a_syntax_error #define ICOM_CALL2(xfn, p,a,b) this_is_a_syntax_error @@ -741,6 +596,21 @@ inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) void (CALLBACK *fn##xfn)(const ICOM_INTERFACE* me,ta a,tb b,tc c,td d,te e,tf f,tg g,th h); +#ifdef ICOM_MSVTABLE_COMPAT +#define ICOM_DEFINE(iface,ibase) \ + typedef struct ICOM_VTABLE(iface) ICOM_VTABLE(iface); \ + struct iface { \ + const ICOM_VTABLE(iface)* lpvtbl; \ + }; \ + struct ICOM_VTABLE(iface) { \ + long dummyRTTI1; \ + long dummyRTTI2; \ + ibase##_IMETHODS \ + iface##_METHODS \ + }; +#define ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 0,0, + +#else #define ICOM_DEFINE(iface,ibase) \ typedef struct ICOM_VTABLE(iface) ICOM_VTABLE(iface); \ struct iface { \ @@ -750,6 +620,8 @@ inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) ibase##_IMETHODS \ iface##_METHODS \ }; +#define ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE +#endif /* ICOM_MSVTABLE_COMPAT */ #define ICOM_CALL(xfn, p) (p)->lpvtbl->fn##xfn(p) @@ -761,6 +633,7 @@ inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther) #define ICOM_CALL6(xfn, p,a,b,c,d,e,f) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f) #define ICOM_CALL7(xfn, p,a,b,c,d,e,f,g) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g) #define ICOM_CALL8(xfn, p,a,b,c,d,e,f,g,h) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g,h) +#define ICOM_CALL9(xfn, p,a,b,c,d,e,f,g,h,i) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g,h,i) #define ICOM_CALL10(xfn, p,a,b,c,d,e,f,g,h,i,j) (p)->lpvtbl->fn##xfn(p,a,b,c,d,e,f,g,h,i,j) @@ -797,22 +670,21 @@ typedef struct ICOM_VTABLE(IUnknown) ICOM_VTABLE(IUnknown); struct IUnknown { ICOM_VTABLE(IUnknown)* lpvtbl; }; + struct ICOM_VTABLE(IUnknown) { - ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj) +#ifdef ICOM_MSVTABLE_COMPAT + long dummyRTTI1; + long dummyRTTI2; +#endif /* ICOM_MSVTABLE_COMPAT */ + #else /* ICOM_CINTERFACE */ struct IUnknown { -#ifndef ICOM_VIRTUAL_METHODS - union { - const void* lpvtbl; - HRESULT (CALLBACK *fnQueryInterface)(IUnknown* me, REFIID riid, LPVOID* ppvObj); - } t; - inline int QueryInterface(REFIID a, LPVOID* b) { return ((IUnknown*)t.lpvtbl)->t.fnQueryInterface(this,a,b); } -#else /* ICOM_VIRTUAL_METHODS */ - ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj) -#endif /* ICOM_VIRTUAL_METHODS */ + #endif /* ICOM_CINTERFACE */ - ICOM_METHOD (ULONG,AddRef) - ICOM_METHOD (ULONG,Release) + + ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj); + ICOM_METHOD (ULONG,AddRef); + ICOM_METHOD (ULONG,Release); }; #undef ICOM_INTERFACE @@ -823,7 +695,6 @@ struct IUnknown { #define IUnknown_Release(p) ICOM_CALL (Release,p) #endif - /***************************************************************************** * IClassFactory interface */ @@ -906,21 +777,6 @@ ICOM_DEFINE(IMalloc,IUnknown) #define IMalloc_GetSize(p,a) ICOM_CALL1(GetSize,p,a) #define IMalloc_DidAlloc(p,a) ICOM_CALL1(DidAlloc,p,a) #define IMalloc_HeapMinimize(p) ICOM_CALL (HeapMinimize,p) - -#ifndef __WINE__ -/* Duplicated for WINELIB */ -/*** IUnknown methods ***/ -#define IMalloc_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) -#define IMalloc_AddRef(p) ICOM_CALL (AddRef,p) -#define IMalloc_Release(p) ICOM_CALL (Release,p) -/*** IMalloc methods ***/ -#define IMalloc_Alloc(p,a) ICOM_CALL1(Alloc,p,a) -#define IMalloc_Realloc(p,a,b) ICOM_CALL2(Realloc,p,a,b) -#define IMalloc_Free(p,a) ICOM_CALL1(Free,p,a) -#define IMalloc_GetSize(p,a) ICOM_CALL1(GetSize,p,a) -#define IMalloc_DidAlloc(p,a) ICOM_CALL1(DidAlloc,p,a) -#define IMalloc_HeapMinimize(p) ICOM_CALL (HeapMinimize,p) -#endif #endif diff --git a/multimedia/dplay.c b/multimedia/dplay.c index 429a747b678..b12501c7db3 100644 --- a/multimedia/dplay.c +++ b/multimedia/dplay.c @@ -1196,7 +1196,9 @@ static HRESULT WINAPI IDirectPlayLobby2AImpl_CreateCompoundAddress /* Direct Play Lobby 1 (ascii) Virtual Table for methods */ /* All lobby 1 methods are exactly the same except QueryInterface */ -static struct ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyAVT = { +static struct ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyAVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectPlayLobbyAImpl_QueryInterface, XCAST(AddRef)IDirectPlayLobby2AImpl_AddRef, XCAST(Release)IDirectPlayLobby2AImpl_Release, @@ -1223,7 +1225,9 @@ static struct ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyAVT = { #endif /* Direct Play Lobby 1 (unicode) Virtual Table for methods */ -static ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyWVT = { +static ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyWVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectPlayLobbyW_QueryInterface, XCAST(AddRef)IDirectPlayLobby2WImpl_AddRef, XCAST(Release)IDirectPlayLobby2WImpl_Release, @@ -1243,7 +1247,9 @@ static ICOM_VTABLE(IDirectPlayLobby) directPlayLobbyWVT = { /* Direct Play Lobby 2 (ascii) Virtual Table for methods */ -static ICOM_VTABLE(IDirectPlayLobby2) directPlayLobby2AVT = { +static ICOM_VTABLE(IDirectPlayLobby2) directPlayLobby2AVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectPlayLobby2AImpl_QueryInterface, IDirectPlayLobby2AImpl_AddRef, IDirectPlayLobby2AImpl_Release, @@ -1262,7 +1268,9 @@ static ICOM_VTABLE(IDirectPlayLobby2) directPlayLobby2AVT = { }; /* Direct Play Lobby 2 (unicode) Virtual Table for methods */ -static ICOM_VTABLE(IDirectPlayLobby2) directPlayLobby2WVT = { +static ICOM_VTABLE(IDirectPlayLobby2) directPlayLobby2WVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectPlayLobby2WImpl_QueryInterface, IDirectPlayLobby2WImpl_AddRef, IDirectPlayLobby2WImpl_Release, @@ -2473,7 +2481,9 @@ HRESULT WINAPI DirectPlay3WImpl_GetPlayerFlags # define XCAST(fun) (void*) #endif -static ICOM_VTABLE(IDirectPlay2) directPlay2WVT = { +static ICOM_VTABLE(IDirectPlay2) directPlay2WVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DirectPlay2W_QueryInterface, XCAST(AddRef)DirectPlay3WImpl_AddRef, XCAST(Release)DirectPlay3WImpl_Release, @@ -2517,7 +2527,9 @@ static ICOM_VTABLE(IDirectPlay2) directPlay2WVT = { # define XCAST(fun) (void*) #endif -static ICOM_VTABLE(IDirectPlay2) directPlay2AVT = { +static ICOM_VTABLE(IDirectPlay2) directPlay2AVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DirectPlay2A_QueryInterface, XCAST(AddRef)DirectPlay3WImpl_AddRef, XCAST(Release)DirectPlay3A_Release, @@ -2554,7 +2566,9 @@ static ICOM_VTABLE(IDirectPlay2) directPlay2AVT = { #undef XCAST -static ICOM_VTABLE(IDirectPlay3) directPlay3AVT = { +static ICOM_VTABLE(IDirectPlay3) directPlay3AVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DirectPlay3A_QueryInterface, DirectPlay3WImpl_AddRef, DirectPlay3A_Release, @@ -2605,7 +2619,9 @@ static ICOM_VTABLE(IDirectPlay3) directPlay3AVT = { DirectPlay3A_GetPlayerFlags }; -static ICOM_VTABLE(IDirectPlay3) directPlay3WVT = { +static ICOM_VTABLE(IDirectPlay3) directPlay3WVT = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DirectPlay3WImpl_QueryInterface, DirectPlay3WImpl_AddRef, DirectPlay3WImpl_Release, diff --git a/multimedia/dsound.c b/multimedia/dsound.c index 7ba17445e4b..c46cf906917 100644 --- a/multimedia/dsound.c +++ b/multimedia/dsound.c @@ -430,7 +430,9 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetVelocity( return DS_OK; } -ICOM_VTABLE(IDirectSound3DBuffer) ds3dbvt = { +ICOM_VTABLE(IDirectSound3DBuffer) ds3dbvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /* IUnknown methods */ IDirectSound3DBufferImpl_QueryInterface, IDirectSound3DBufferImpl_AddRef, @@ -691,7 +693,9 @@ static HRESULT WINAPI IDirectSound3DListenerImpl_CommitDeferredSettings( return DS_OK; } -ICOM_VTABLE(IDirectSound3DListener) ds3dlvt = { +ICOM_VTABLE(IDirectSound3DListener) ds3dlvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE /* IUnknown methods */ IDirectSound3DListenerImpl_QueryInterface, IDirectSound3DListenerImpl_AddRef, @@ -766,7 +770,9 @@ static HRESULT WINAPI IDirectSoundNotifyImpl_SetNotificationPositions( return 0; } -ICOM_VTABLE(IDirectSoundNotify) dsnvt = { +ICOM_VTABLE(IDirectSoundNotify) dsnvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectSoundNotifyImpl_QueryInterface, IDirectSoundNotifyImpl_AddRef, IDirectSoundNotifyImpl_Release, @@ -1251,7 +1257,9 @@ static HRESULT WINAPI IDirectSoundBufferImpl_QueryInterface( return E_FAIL; } -static ICOM_VTABLE(IDirectSoundBuffer) dsbvt = { +static ICOM_VTABLE(IDirectSoundBuffer) dsbvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectSoundBufferImpl_QueryInterface, IDirectSoundBufferImpl_AddRef, IDirectSoundBufferImpl_Release, @@ -1589,7 +1597,9 @@ static HRESULT WINAPI IDirectSoundImpl_Initialize( return DS_OK; } -static ICOM_VTABLE(IDirectSound) dsvt = { +static ICOM_VTABLE(IDirectSound) dsvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectSoundImpl_QueryInterface, IDirectSoundImpl_AddRef, IDirectSoundImpl_Release, diff --git a/ole/antimoniker.c b/ole/antimoniker.c index 9d537c36d1f..f2c1484886d 100644 --- a/ole/antimoniker.c +++ b/ole/antimoniker.c @@ -84,6 +84,7 @@ HRESULT WINAPI AntiMonikerImpl_Destroy(AntiMonikerImpl* iface); /* IPersistStream and IMoniker functions. */ static ICOM_VTABLE(IMoniker) VT_AntiMonikerImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE AntiMonikerImpl_QueryInterface, AntiMonikerImpl_AddRef, AntiMonikerImpl_Release, @@ -113,6 +114,7 @@ static ICOM_VTABLE(IMoniker) VT_AntiMonikerImpl = /* Virtual function table for the IROTData class. */ static ICOM_VTABLE(IROTData) VT_ROTDataImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE AntiMonikerROTDataImpl_QueryInterface, AntiMonikerROTDataImpl_AddRef, AntiMonikerROTDataImpl_Release, diff --git a/ole/bindctx.c b/ole/bindctx.c index 355a23aa4cf..b84c00abfd1 100644 --- a/ole/bindctx.c +++ b/ole/bindctx.c @@ -68,6 +68,7 @@ HRESULT WINAPI BindCtxImpl_GetObjectIndex(BindCtxImpl* This,IUnknown* punk,LPOLE /* Virtual function table for the BindCtx class. */ static ICOM_VTABLE(IBindCtx) VT_BindCtxImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE BindCtxImpl_QueryInterface, BindCtxImpl_AddRef, BindCtxImpl_Release, diff --git a/ole/compositemoniker.c b/ole/compositemoniker.c index 35bef537d2e..2f145f5fcb5 100644 --- a/ole/compositemoniker.c +++ b/ole/compositemoniker.c @@ -127,6 +127,7 @@ HRESULT WINAPI EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker,ULONG tab static ICOM_VTABLE(IMoniker) VT_CompositeMonikerImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE CompositeMonikerImpl_QueryInterface, CompositeMonikerImpl_AddRef, CompositeMonikerImpl_Release, @@ -156,6 +157,7 @@ static ICOM_VTABLE(IMoniker) VT_CompositeMonikerImpl = /* Virtual function table for the IROTData class. */ static ICOM_VTABLE(IROTData) VT_ROTDataImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE CompositeMonikerROTDataImpl_QueryInterface, CompositeMonikerROTDataImpl_AddRef, CompositeMonikerROTDataImpl_Release, @@ -166,6 +168,7 @@ static ICOM_VTABLE(IROTData) VT_ROTDataImpl = /* Virtual function table for the IROTData class */ static ICOM_VTABLE(IEnumMoniker) VT_EnumMonikerImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE EnumMonikerImpl_QueryInterface, EnumMonikerImpl_AddRef, EnumMonikerImpl_Release, diff --git a/ole/datacache.c b/ole/datacache.c index 365878d7936..ed461d67dcf 100644 --- a/ole/datacache.c +++ b/ole/datacache.c @@ -354,6 +354,7 @@ static HRESULT WINAPI DataCache_OnStop( */ static ICOM_VTABLE(IUnknown) DataCache_NDIUnknown_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_NDIUnknown_QueryInterface, DataCache_NDIUnknown_AddRef, DataCache_NDIUnknown_Release @@ -361,6 +362,7 @@ static ICOM_VTABLE(IUnknown) DataCache_NDIUnknown_VTable = static ICOM_VTABLE(IDataObject) DataCache_IDataObject_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_IDataObject_QueryInterface, DataCache_IDataObject_AddRef, DataCache_IDataObject_Release, @@ -377,6 +379,7 @@ static ICOM_VTABLE(IDataObject) DataCache_IDataObject_VTable = static ICOM_VTABLE(IPersistStorage) DataCache_IPersistStorage_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_IPersistStorage_QueryInterface, DataCache_IPersistStorage_AddRef, DataCache_IPersistStorage_Release, @@ -391,6 +394,7 @@ static ICOM_VTABLE(IPersistStorage) DataCache_IPersistStorage_VTable = static ICOM_VTABLE(IViewObject2) DataCache_IViewObject2_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_IViewObject2_QueryInterface, DataCache_IViewObject2_AddRef, DataCache_IViewObject2_Release, @@ -405,6 +409,7 @@ static ICOM_VTABLE(IViewObject2) DataCache_IViewObject2_VTable = static ICOM_VTABLE(IOleCache2) DataCache_IOleCache2_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_IOleCache2_QueryInterface, DataCache_IOleCache2_AddRef, DataCache_IOleCache2_Release, @@ -419,6 +424,7 @@ static ICOM_VTABLE(IOleCache2) DataCache_IOleCache2_VTable = static ICOM_VTABLE(IOleCacheControl) DataCache_IOleCacheControl_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataCache_IOleCacheControl_QueryInterface, DataCache_IOleCacheControl_AddRef, DataCache_IOleCacheControl_Release, diff --git a/ole/defaulthandler.c b/ole/defaulthandler.c index 51787a40218..9f83959f244 100644 --- a/ole/defaulthandler.c +++ b/ole/defaulthandler.c @@ -305,6 +305,7 @@ static HRESULT WINAPI DefaultHandler_SetContainedObject( */ static ICOM_VTABLE(IOleObject) DefaultHandler_IOleObject_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DefaultHandler_QueryInterface, DefaultHandler_AddRef, DefaultHandler_Release, @@ -333,6 +334,7 @@ static ICOM_VTABLE(IOleObject) DefaultHandler_IOleObject_VTable = static ICOM_VTABLE(IUnknown) DefaultHandler_NDIUnknown_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DefaultHandler_NDIUnknown_QueryInterface, DefaultHandler_NDIUnknown_AddRef, DefaultHandler_NDIUnknown_Release, @@ -340,6 +342,7 @@ static ICOM_VTABLE(IUnknown) DefaultHandler_NDIUnknown_VTable = static ICOM_VTABLE(IDataObject) DefaultHandler_IDataObject_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DefaultHandler_IDataObject_QueryInterface, DefaultHandler_IDataObject_AddRef, DefaultHandler_IDataObject_Release, @@ -356,6 +359,7 @@ static ICOM_VTABLE(IDataObject) DefaultHandler_IDataObject_VTable = static ICOM_VTABLE(IRunnableObject) DefaultHandler_IRunnableObject_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DefaultHandler_IRunnableObject_QueryInterface, DefaultHandler_IRunnableObject_AddRef, DefaultHandler_IRunnableObject_Release, diff --git a/ole/filemoniker.c b/ole/filemoniker.c index cac619c0c59..fd7cb02ddad 100644 --- a/ole/filemoniker.c +++ b/ole/filemoniker.c @@ -89,6 +89,7 @@ int WINAPI FileMonikerImpl_DecomposePath(LPOLESTR str, LPOLESTR** tabStr); /* IPersistStream and IMoniker functions. */ static ICOM_VTABLE(IMoniker) VT_FileMonikerImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE FileMonikerImpl_QueryInterface, FileMonikerImpl_AddRef, FileMonikerImpl_Release, @@ -118,6 +119,7 @@ static ICOM_VTABLE(IMoniker) VT_FileMonikerImpl = /* Virtual function table for the IROTData class. */ static ICOM_VTABLE(IROTData) VT_ROTDataImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE FileMonikerROTDataImpl_QueryInterface, FileMonikerROTDataImpl_AddRef, FileMonikerROTDataImpl_Release, diff --git a/ole/hglobalstream.c b/ole/hglobalstream.c index 6346c8e0c32..cce4b2ac0d6 100644 --- a/ole/hglobalstream.c +++ b/ole/hglobalstream.c @@ -146,6 +146,7 @@ HRESULT WINAPI HGLOBALStreamImpl_Clone( */ static ICOM_VTABLE(IStream) HGLOBALStreamImpl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE HGLOBALStreamImpl_QueryInterface, HGLOBALStreamImpl_AddRef, HGLOBALStreamImpl_Release, diff --git a/ole/ifs.c b/ole/ifs.c index 91e9549022d..7443682e0fe 100644 --- a/ole/ifs.c +++ b/ole/ifs.c @@ -69,7 +69,9 @@ static HRESULT WINAPI IUnknown_fnQueryInterface(LPUNKNOWN iface,REFIID refiid,LP return OLE_E_ENUM_NOMORE; } -static ICOM_VTABLE(IUnknown) uvt = { +static ICOM_VTABLE(IUnknown) uvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IUnknown_fnQueryInterface, IUnknown_fnAddRef, IUnknown_fnRelease @@ -328,7 +330,9 @@ static LPVOID WINAPI IMalloc_fnHeapMinimize(LPMALLOC iface) { return NULL; } -static ICOM_VTABLE(IMalloc) VT_IMalloc32 = { +static ICOM_VTABLE(IMalloc) VT_IMalloc32 = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IMalloc_fnQueryInterface, IMalloc_fnAddRef, IMalloc_fnRelease, diff --git a/ole/itemmoniker.c b/ole/itemmoniker.c index 8633d95db0d..98fb5ab741b 100644 --- a/ole/itemmoniker.c +++ b/ole/itemmoniker.c @@ -88,6 +88,7 @@ static HRESULT WINAPI ItemMonikerROTDataImpl_GetComparaisonData(IROTData* iface, /* IPersistStream and IMoniker functions. */ static ICOM_VTABLE(IMoniker) VT_ItemMonikerImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ItemMonikerImpl_QueryInterface, ItemMonikerImpl_AddRef, ItemMonikerImpl_Release, @@ -117,6 +118,7 @@ static ICOM_VTABLE(IMoniker) VT_ItemMonikerImpl = /* Virtual function table for the IROTData class. */ static ICOM_VTABLE(IROTData) VT_ROTDataImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ItemMonikerROTDataImpl_QueryInterface, ItemMonikerROTDataImpl_AddRef, ItemMonikerROTDataImpl_Release, diff --git a/ole/memlockbytes.c b/ole/memlockbytes.c index 2381db89265..6be250c2e4b 100644 --- a/ole/memlockbytes.c +++ b/ole/memlockbytes.c @@ -116,6 +116,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl_Stat( */ static ICOM_VTABLE(ILockBytes) HGLOBALLockBytesImpl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE HGLOBALLockBytesImpl_QueryInterface, HGLOBALLockBytesImpl_AddRef, HGLOBALLockBytesImpl_Release, diff --git a/ole/moniker.c b/ole/moniker.c index 719219acff7..6f27879296c 100644 --- a/ole/moniker.c +++ b/ole/moniker.c @@ -62,6 +62,7 @@ HRESULT WINAPI RunningObjectTableImpl_GetObjectIndex(RunningObjectTableImpl* Thi /* Virtual function table for the IRunningObjectTable class. */ static ICOM_VTABLE(IRunningObjectTable) VT_RunningObjectTableImpl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE RunningObjectTableImpl_QueryInterface, RunningObjectTableImpl_AddRef, RunningObjectTableImpl_Release, diff --git a/ole/olefont.c b/ole/olefont.c index 0c62d5cb7ed..d5e16d3fbec 100644 --- a/ole/olefont.c +++ b/ole/olefont.c @@ -168,6 +168,7 @@ static HRESULT WINAPI OLEFontImpl_GetSizeMax(IPersistStream* iface, */ static ICOM_VTABLE(IFont) OLEFontImpl_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE OLEFontImpl_QueryInterface, OLEFontImpl_AddRef, OLEFontImpl_Release, @@ -199,6 +200,7 @@ static ICOM_VTABLE(IFont) OLEFontImpl_VTable = static ICOM_VTABLE(IDispatch) OLEFontImpl_IDispatch_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE OLEFontImpl_IDispatch_QueryInterface, OLEFontImpl_IDispatch_AddRef, OLEFontImpl_IDispatch_Release, @@ -210,6 +212,7 @@ static ICOM_VTABLE(IDispatch) OLEFontImpl_IDispatch_VTable = static ICOM_VTABLE(IPersistStream) OLEFontImpl_IPersistStream_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE OLEFontImpl_IPersistStream_QueryInterface, OLEFontImpl_IPersistStream_AddRef, OLEFontImpl_IPersistStream_Release, diff --git a/ole/oleobj.c b/ole/oleobj.c index 87519e508cf..9090250d4d0 100644 --- a/ole/oleobj.c +++ b/ole/oleobj.c @@ -386,6 +386,7 @@ static HRESULT WINAPI DataAdviseHolder_SendOnDataChange( */ static struct ICOM_VTABLE(IDataAdviseHolder) DataAdviseHolderImpl_VTable = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE DataAdviseHolder_QueryInterface, DataAdviseHolder_AddRef, DataAdviseHolder_Release, diff --git a/ole/stg_stream.c b/ole/stg_stream.c index 2ef6bd23065..2504d800a71 100644 --- a/ole/stg_stream.c +++ b/ole/stg_stream.c @@ -28,6 +28,7 @@ DEFAULT_DEBUG_CHANNEL(storage) */ static ICOM_VTABLE(IStream) StgStreamImpl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE StgStreamImpl_QueryInterface, StgStreamImpl_AddRef, StgStreamImpl_Release, diff --git a/ole/storage32.c b/ole/storage32.c index dc41df63f20..c0356a7e637 100644 --- a/ole/storage32.c +++ b/ole/storage32.c @@ -89,6 +89,7 @@ static DWORD GetCreationModeFromSTGM(DWORD stgm); */ static ICOM_VTABLE(IStorage) Storage32Impl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE StorageBaseImpl_QueryInterface, StorageBaseImpl_AddRef, StorageBaseImpl_Release, @@ -114,6 +115,7 @@ static ICOM_VTABLE(IStorage) Storage32Impl_Vtbl = */ static ICOM_VTABLE(IStorage) Storage32InternalImpl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE StorageBaseImpl_QueryInterface, StorageBaseImpl_AddRef, StorageBaseImpl_Release, @@ -139,6 +141,7 @@ static ICOM_VTABLE(IStorage) Storage32InternalImpl_Vtbl = */ static ICOM_VTABLE(IEnumSTATSTG) IEnumSTATSTGImpl_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IEnumSTATSTGImpl_QueryInterface, IEnumSTATSTGImpl_AddRef, IEnumSTATSTGImpl_Release, diff --git a/windows/dinput.c b/windows/dinput.c index 79bdd757432..05514b34a2f 100644 --- a/windows/dinput.c +++ b/windows/dinput.c @@ -291,7 +291,9 @@ static HRESULT WINAPI IDirectInputAImpl_RunControlPanel(LPDIRECTINPUTA iface, return DI_OK; } -static ICOM_VTABLE(IDirectInputA) ddiavt= { +static ICOM_VTABLE(IDirectInputA) ddiavt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectInputAImpl_QueryInterface, IDirectInputAImpl_AddRef, IDirectInputAImpl_Release, @@ -1096,7 +1098,9 @@ static HRESULT WINAPI SysMouseAImpl_SetProperty(LPDIRECTINPUTDEVICE2A iface, } -static ICOM_VTABLE(IDirectInputDevice2A) SysKeyboardAvt={ +static ICOM_VTABLE(IDirectInputDevice2A) SysKeyboardAvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectInputDevice2AImpl_QueryInterface, IDirectInputDevice2AImpl_AddRef, IDirectInputDevice2AImpl_Release, @@ -1126,7 +1130,9 @@ static ICOM_VTABLE(IDirectInputDevice2A) SysKeyboardAvt={ IDirectInputDevice2AImpl_SendDeviceData, }; -static ICOM_VTABLE(IDirectInputDevice2A) SysMouseAvt={ +static ICOM_VTABLE(IDirectInputDevice2A) SysMouseAvt = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectInputDevice2AImpl_QueryInterface, IDirectInputDevice2AImpl_AddRef, SysMouseAImpl_Release,