Use a more compatible technique to declare COM interfaces methods,
using Microsoft's STDMETHOD macros instead of the Wine-specific
ICOM_METHOD ones.

diff --git a/dlls/ddraw/direct3d/mesa.c b/dlls/ddraw/direct3d/mesa.c
index f2de412..ce41219 100644
--- a/dlls/ddraw/direct3d/mesa.c
+++ b/dlls/ddraw/direct3d/mesa.c
@@ -123,7 +123,7 @@
 		     REFCLSID iid,
 		     IDirectDrawSurfaceImpl *lpDDS,
 		     void **obj,
-		     int interface) {
+		     int version) {
     IDirect3DDeviceImpl *lpd3ddev;
     HRESULT ret_value;
 
@@ -135,7 +135,7 @@
 	(IsEqualGUID(&IID_IDirect3DHALDevice, iid)) ||
 	(IsEqualGUID(&IID_IDirect3DTnLHalDevice, iid)) ||
 	(IsEqualGUID(&IID_IDirect3DRefDevice, iid))) {
-        switch (interface) {
+        switch (version) {
 	    case 1:
 		*obj = ICOM_INTERFACE(lpd3ddev, IDirect3DDevice);
 	        TRACE(" returning OpenGL D3DDevice %p.\n", *obj);
diff --git a/dlls/dplayx/dplaysp.h b/dlls/dplayx/dplaysp.h
index 1b961af..674f947 100644
--- a/dlls/dplayx/dplaysp.h
+++ b/dlls/dplayx/dplaysp.h
@@ -51,27 +51,27 @@
 #define DPLAYI_GROUP_HIDDEN          0x00000400
 
 /* Define the COM interface */
-#define ICOM_INTERFACE IDirectPlaySP
+#define INTERFACE IDirectPlaySP
 #define IDirectPlaySP_METHODS \
-   ICOM_METHOD5(HRESULT,AddMRUEntry, LPCWSTR,lpSection, LPCWSTR,lpKey, LPCVOID,lpData, DWORD,dwDataSize, DWORD,dwMaxEntries ) \
-   ICOM_METHOD6(HRESULT,CreateAddress, REFGUID,guidSP, REFGUID,guidDataType, LPCVOID,lpData, DWORD,dwDataSize, LPVOID,lpAddress,LPDWORD,lpdwAddressSize) \
-   ICOM_METHOD4(HRESULT,EnumAddress, LPDPENUMADDRESSCALLBACK,lpEnumAddressCallback, LPCVOID,lpAddress, DWORD,dwAddressSize, LPVOID,lpContext ) \
-   ICOM_METHOD4(HRESULT,EnumMRUEntries, LPCWSTR,lpSection, LPCWSTR,lpKey, LPENUMMRUCALLBACK,lpEnumMRUCallback, LPVOID,lpContext ) \
-   ICOM_METHOD2(HRESULT,GetPlayerFlags,       DPID,idPlayer, LPDWORD,lpdwPlayerFlags ) \
-   ICOM_METHOD4(HRESULT,GetSPPlayerData,      DPID,idPlayer, LPVOID*,lplpData, LPDWORD,lpdwDataSize, DWORD,dwFlags ) \
-   ICOM_METHOD3(HRESULT,HandleMessage,        LPVOID,lpMessageBody, DWORD,dwMessageBodySize, LPVOID,lpMessageHeader ) \
-   ICOM_METHOD4(HRESULT,SetSPPlayerData,      DPID,idPlayer, LPVOID,lpData, DWORD,dwDataSize, DWORD,dwFlags ) \
-   ICOM_METHOD4(HRESULT,CreateCompoundAddress, LPCDPCOMPOUNDADDRESSELEMENT,lpElements, DWORD,dwElementCount, LPVOID,lpAddress, LPDWORD,lpdwAddressSize ) \
-   ICOM_METHOD3(HRESULT,GetSPData,                LPVOID*,lplpData, LPDWORD,dwDataSize, DWORD,dwFlags ) \
-   ICOM_METHOD3(HRESULT,SetSPData,                LPVOID,lpData, DWORD,dwDataSize, DWORD,dwFlags ) \
-   ICOM_METHOD2(VOID,SendComplete,              LPVOID,, DWORD, )
+   STDMETHOD(AddMRUEntry)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPCVOID lpData, DWORD dwDataSize, DWORD dwMaxEntries ) PURE; \
+   STDMETHOD(CreateAddress)(THIS_ REFGUID guidSP, REFGUID guidDataType, LPCVOID lpData, DWORD dwDataSize, LPVOID lpAddress,LPDWORD lpdwAddressSize) PURE; \
+   STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID lpAddress, DWORD dwAddressSize, LPVOID lpContext ) PURE; \
+   STDMETHOD(EnumMRUEntries)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPENUMMRUCALLBACK lpEnumMRUCallback, LPVOID lpContext ) PURE; \
+   STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwPlayerFlags ) PURE; \
+   STDMETHOD(GetSPPlayerData)(THIS_ DPID idPlayer, LPVOID *lplpData, LPDWORD lpdwDataSize, DWORD dwFlags ) PURE; \
+   STDMETHOD(HandleMessage)(THIS_ LPVOID lpMessageBody, DWORD dwMessageBodySize, LPVOID lpMessageHeader ) PURE; \
+   STDMETHOD(SetSPPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE; \
+   STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT lpElements, DWORD dwElementCount, LPVOID lpAddress, LPDWORD lpdwAddressSize ) PURE; \
+   STDMETHOD(GetSPData)(THIS_ LPVOID *lplpData, LPDWORD dwDataSize, DWORD dwFlags ) PURE; \
+   STDMETHOD(SetSPData)(THIS_ LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE; \
+   STDMETHOD_(VOID,SendComplete)(THIS_ LPVOID , DWORD  ) PURE;
 
 #define IDirectPlaySP_IMETHODS \
    IUnknown_IMETHODS \
    IDirectPlaySP_METHODS
 
 ICOM_DEFINE(IDirectPlaySP,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 
 /* NOTE: The microsoft provided header file doesn't have these access
@@ -356,4 +356,3 @@
 extern DWORD gdwDPlaySPRefCount;
 
 #endif
-
diff --git a/dlls/dplayx/lobbysp.h b/dlls/dplayx/lobbysp.h
index 4e905f1..e072884 100644
--- a/dlls/dplayx/lobbysp.h
+++ b/dlls/dplayx/lobbysp.h
@@ -456,31 +456,31 @@
 HRESULT WINAPI DPLSPInit(LPSPDATA_INIT);
 
 /* Define the COM interface */
-#define ICOM_INTERFACE IDPLobbySP
+#define INTERFACE IDPLobbySP
 #define IDPLobbySP_METHODS \
-  ICOM_METHOD1(HRESULT, AddGroupToGroup,       LPSPDATA_ADDREMOTEGROUPTOGROUP, argtg ) \
-  ICOM_METHOD1(HRESULT, AddPlayerToGroup,      LPSPDATA_ADDREMOTEPLAYERTOGROUP, arptg ) \
-  ICOM_METHOD1(HRESULT, CreateGroup,           LPSPDATA_CREATEREMOTEGROUP, crg ) \
-  ICOM_METHOD1(HRESULT, CreateGroupInGroup,    LPSPDATA_CREATEREMOTEGROUPINGROUP, crgig ) \
-  ICOM_METHOD1(HRESULT, DeleteGroupFromGroup,  LPSPDATA_DELETEREMOTEGROUPFROMGROUP, drgfg ) \
-  ICOM_METHOD1(HRESULT, DeletePlayerFromGroup, LPSPDATA_DELETEREMOTEPLAYERFROMGROUP, drpfg ) \
-  ICOM_METHOD1(HRESULT, DestroyGroup,          LPSPDATA_DESTROYREMOTEGROUP, drg ) \
-  ICOM_METHOD1(HRESULT, EnumSessionsResponse,  LPSPDATA_ENUMSESSIONSRESPONSE, er ) \
-  ICOM_METHOD1(HRESULT, GetSPDataPointer,      LPVOID*, lplpData ) \
-  ICOM_METHOD1(HRESULT, HandleMessage,         LPSPDATA_HANDLEMESSAGE, hm ) \
-  ICOM_METHOD1(HRESULT, SendChatMessage,       LPSPDATA_CHATMESSAGE, cm ) \
-  ICOM_METHOD1(HRESULT, SetGroupName,          LPSPDATA_SETREMOTEGROUPNAME, srgn ) \
-  ICOM_METHOD1(HRESULT, SetPlayerName,         LPSPDATA_SETREMOTEPLAYERNAME, srpn ) \
-  ICOM_METHOD1(HRESULT, SetSessionDesc,        LPSPDATA_SETSESSIONDESC, ssd ) \
-  ICOM_METHOD1(HRESULT, SetSPDataPointer,      LPVOID, lpData ) \
-  ICOM_METHOD1(HRESULT, StartSession,          LPSPDATA_STARTSESSIONCOMMAND, ssc )
+  STDMETHOD(AddGroupToGroup)(THIS_ LPSPDATA_ADDREMOTEGROUPTOGROUP  argtg ) PURE; \
+  STDMETHOD(AddPlayerToGroup)(THIS_ LPSPDATA_ADDREMOTEPLAYERTOGROUP  arptg ) PURE; \
+  STDMETHOD(CreateGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUP  crg ) PURE; \
+  STDMETHOD(CreateGroupInGroup)(THIS_ LPSPDATA_CREATEREMOTEGROUPINGROUP  crgig ) PURE; \
+  STDMETHOD(DeleteGroupFromGroup)(THIS_ LPSPDATA_DELETEREMOTEGROUPFROMGROUP  drgfg ) PURE; \
+  STDMETHOD(DeletePlayerFromGroup)(THIS_ LPSPDATA_DELETEREMOTEPLAYERFROMGROUP  drpfg ) PURE; \
+  STDMETHOD(DestroyGroup)(THIS_ LPSPDATA_DESTROYREMOTEGROUP  drg ) PURE; \
+  STDMETHOD(EnumSessionsResponse)(THIS_ LPSPDATA_ENUMSESSIONSRESPONSE  er ) PURE; \
+  STDMETHOD(GetSPDataPointer)(THIS_ LPVOID * lplpData ) PURE; \
+  STDMETHOD(HandleMessage)(THIS_ LPSPDATA_HANDLEMESSAGE  hm ) PURE; \
+  STDMETHOD(SendChatMessage)(THIS_ LPSPDATA_CHATMESSAGE  cm ) PURE; \
+  STDMETHOD(SetGroupName)(THIS_ LPSPDATA_SETREMOTEGROUPNAME  srgn ) PURE; \
+  STDMETHOD(SetPlayerName)(THIS_ LPSPDATA_SETREMOTEPLAYERNAME  srpn ) PURE; \
+  STDMETHOD(SetSessionDesc)(THIS_ LPSPDATA_SETSESSIONDESC  ssd ) PURE; \
+  STDMETHOD(SetSPDataPointer)(THIS_ LPVOID  lpData ) PURE; \
+  STDMETHOD(StartSession)(THIS_ LPSPDATA_STARTSESSIONCOMMAND  ssc ) PURE;
 
 #define IDPLobbySP_IMETHODS \
    IUnknown_IMETHODS \
    IDPLobbySP_METHODS
 
 ICOM_DEFINE(IDPLobbySP,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDPLobbySP_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
diff --git a/dlls/ole32/ifs.h b/dlls/ole32/ifs.h
index e6a82a4..2bf4432 100644
--- a/dlls/ole32/ifs.h
+++ b/dlls/ole32/ifs.h
@@ -27,19 +27,19 @@
 
 typedef struct IMalloc16 IMalloc16, *LPMALLOC16;
 
-#define ICOM_INTERFACE IMalloc16
+#define INTERFACE IMalloc16
 #define IMalloc16_METHODS \
-    ICOM_METHOD1 (LPVOID, Alloc,        DWORD,  cb) \
-    ICOM_METHOD2 (LPVOID, Realloc,      LPVOID, pv, DWORD, cb) \
-    ICOM_VMETHOD1(        Free,         LPVOID, pv) \
-    ICOM_METHOD1 (DWORD,  GetSize,      LPVOID, pv) \
-    ICOM_METHOD1 (INT16,  DidAlloc,     LPVOID, pv) \
-    ICOM_METHOD  (LPVOID, HeapMinimize)
+    STDMETHOD_(LPVOID,Alloc)(THIS_ DWORD   cb) PURE; \
+    STDMETHOD_(LPVOID,Realloc)(THIS_ LPVOID  pv, DWORD  cb) PURE; \
+    STDMETHOD_(void,Free)(THIS_ LPVOID  pv) PURE; \
+    STDMETHOD_(DWORD,GetSize)(THIS_ LPVOID  pv) PURE; \
+    STDMETHOD_(INT16,DidAlloc)(THIS_ LPVOID  pv) PURE; \
+    STDMETHOD_(LPVOID,HeapMinimize)(THIS) PURE;
 #define IMalloc16_IMETHODS \
     IUnknown_IMETHODS \
     IMalloc16_METHODS
 ICOM_DEFINE(IMalloc16,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /**********************************************************************/
 
@@ -49,22 +49,22 @@
 
 typedef struct ILockBytes16 *LPLOCKBYTES16, ILockBytes16;
 
-#define ICOM_INTERFACE ILockBytes
+#define INTERFACE ILockBytes
 #define ILockBytes16_METHODS \
-	ICOM_METHOD4(HRESULT,ReadAt,       ULARGE_INTEGER,ulOffset, void*,pv, ULONG, cb, ULONG*,pcbRead) \
-	ICOM_METHOD4(HRESULT,WriteAt,      ULARGE_INTEGER,ulOffset, const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
-	ICOM_METHOD (HRESULT,Flush) \
-	ICOM_METHOD1(HRESULT,SetSize,      ULARGE_INTEGER,cb) \
-	ICOM_METHOD3(HRESULT,LockRegion,   ULARGE_INTEGER,libOffset, ULARGE_INTEGER, cb, DWORD,dwLockType) \
-	ICOM_METHOD3(HRESULT,UnlockRegion, ULARGE_INTEGER,libOffset, ULARGE_INTEGER, cb, DWORD,dwLockType) \
-	ICOM_METHOD2(HRESULT,Stat,         STATSTG*,pstatstg, DWORD,grfStatFlag)
+	STDMETHOD(ReadAt)(THIS_ ULARGE_INTEGER ulOffset, void *pv, ULONG  cb, ULONG *pcbRead) PURE; \
+	STDMETHOD(WriteAt)(THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) PURE; \
+	STDMETHOD(Flush)(THIS) PURE; \
+	STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER cb) PURE; \
+	STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE; \
+	STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE; \
+	STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag) PURE;
 
 #define ILockBytes16_IMETHODS \
 	IUnknown_IMETHODS \
 	ILockBytes16_METHODS
 
 ICOM_DEFINE(ILockBytes16,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 
 #endif /* __WINE_OLE_IFS_H */
diff --git a/dlls/shell32/shellfolder.h b/dlls/shell32/shellfolder.h
index 0457825..b619bc3 100644
--- a/dlls/shell32/shellfolder.h
+++ b/dlls/shell32/shellfolder.h
@@ -35,17 +35,17 @@
  * ISFHelper interface
  */
 
-#define ICOM_INTERFACE ISFHelper
+#define INTERFACE ISFHelper
 #define ISFHelper_METHODS \
-	ICOM_METHOD2 (HRESULT, GetUniqueName, LPSTR, lpName, UINT, uLen) \
-	ICOM_METHOD3 (HRESULT, AddFolder, HWND, hwnd, LPCSTR, lpName, LPITEMIDLIST*, ppidlOut) \
-	ICOM_METHOD2 (HRESULT, DeleteItems, UINT, cidl, LPCITEMIDLIST*, apidl) \
-	ICOM_METHOD3 (HRESULT, CopyItems, IShellFolder*, pSFFrom, UINT, cidl, LPCITEMIDLIST*, apidl)
+	STDMETHOD(GetUniqueName)(THIS_ LPSTR  lpName, UINT  uLen) PURE; \
+	STDMETHOD(AddFolder)(THIS_ HWND  hwnd, LPCSTR  lpName, LPITEMIDLIST * ppidlOut) PURE; \
+	STDMETHOD(DeleteItems)(THIS_ UINT  cidl, LPCITEMIDLIST * apidl) PURE; \
+	STDMETHOD(CopyItems)(THIS_ IShellFolder * pSFFrom, UINT  cidl, LPCITEMIDLIST * apidl) PURE;
 #define ISFHelper_IMETHODS \
     IUnknown_IMETHODS \
     ISFHelper_METHODS
 ICOM_DEFINE(ISFHelper, IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define ISFHelper_QueryInterface(p,a,b)		ICOM_CALL2(QueryInterface,p,a,b)