diff --git a/include/wine/obj_base.h b/include/wine/obj_base.h index 9b846fe704a..ee2c95fc2e9 100644 --- a/include/wine/obj_base.h +++ b/include/wine/obj_base.h @@ -14,10 +14,16 @@ * 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. + * define the ICOM_USE_COM_INTERFACE_ATTRIBUTE macro below. This may also + * require the addition of the -vtable-thunks option for g++. * * If you aren't interested in WineLib C++ compatability at all, leave both * options off. + * + * The preferable method for using ICOM_USE_COM_INTERFACE_ATTRIBUTE macro + * would be to define it only for your WineLib application. This allows you + * to have both binary and WineLib compatibility for C and C++ at the same + * time :) */ /* #define ICOM_MSVTABLE_COMPAT 1 */ /* #define ICOM_USE_COM_INTERFACE_ATTRIBUTE 1 */ @@ -698,11 +704,11 @@ typedef struct IUnknown IUnknown, *LPUNKNOWN; typedef struct ICOM_VTABLE(IUnknown) ICOM_VTABLE(IUnknown); struct IUnknown { ICOM_VFIELD(IUnknown); -#if defined(ICOM_USE_COM_INTERFACE_ATTRIBUTE) && !defined(ICOM_CINTERFACE) +#if defined(ICOM_USE_COM_INTERFACE_ATTRIBUTE) } __attribute__ ((com_interface)); #else }; -#endif /* ICOM_US_COM_INTERFACE_ATTRIBUTE, !ICOM_CINTERFACE */ +#endif /* ICOM_US_COM_INTERFACE_ATTRIBUTE */ struct ICOM_VTABLE(IUnknown) { #ifdef ICOM_MSVTABLE_COMPAT @@ -718,7 +724,12 @@ struct IUnknown { ICOM_METHOD2(HRESULT,QueryInterface,REFIID,riid, LPVOID*,ppvObj) ICOM_METHOD (ULONG,AddRef) ICOM_METHOD (ULONG,Release) +#if defined(ICOM_USE_COM_INTERFACE_ATTRIBUTE) +} __attribute__ ((com_interface)); +#else }; +#endif /* ICOM_US_COM_INTERFACE_ATTRIBUTE */ + #undef ICOM_INTERFACE /*** IUnknown methods ***/