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/include/dmusici.h b/include/dmusici.h
index 4afd330..3fc8fed 100644
--- a/include/dmusici.h
+++ b/include/dmusici.h
@@ -794,20 +794,20 @@
 /*****************************************************************************
  * IDirectMusicBand interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicBand
+#undef INTERFACE
+#define INTERFACE IDirectMusicBand
 #define IDirectMusicBand_METHODS \
     /*** IDirectMusicBand methods ***/ \
-    ICOM_METHOD1(HRESULT, CreateSegment, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD1(HRESULT, Download, IDirectMusicPerformance*,pPerformance) \
-    ICOM_METHOD1(HRESULT, Unload, IDirectMusicPerformance*,pPerformance)
+    STDMETHOD(CreateSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(Download)(THIS_ IDirectMusicPerformance *pPerformance) PURE; \
+    STDMETHOD(Unload)(THIS_ IDirectMusicPerformance *pPerformance) PURE;
 
     /*** IDirectMusicBand methods ***/
 #define IDirectMusicBand_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicBand_METHODS
 ICOM_DEFINE(IDirectMusicBand,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicBand_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -822,20 +822,20 @@
 /*****************************************************************************
  * IDirectMusicObject interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicObject
+#undef INTERFACE
+#define INTERFACE IDirectMusicObject
 #define IDirectMusicObject_METHODS \
     /*** IDirectMusicObject methods ***/ \
-    ICOM_METHOD1(HRESULT, GetDescriptor, LPDMUS_OBJECTDESC,pDesc) \
-    ICOM_METHOD1(HRESULT, SetDescriptor, LPDMUS_OBJECTDESC,pDesc) \
-    ICOM_METHOD2(HRESULT, ParseDescriptor, LPSTREAM,pStream, LPDMUS_OBJECTDESC,pDesc)
+    STDMETHOD(GetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; \
+    STDMETHOD(SetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; \
+    STDMETHOD(ParseDescriptor)(THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE;
 
     /*** IDirectMusicObject methods ***/
 #define IDirectMusicObject_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicObject_METHODS
 ICOM_DEFINE(IDirectMusicObject,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicObject_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -850,26 +850,26 @@
 /*****************************************************************************
  * IDirectMusicLoader interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicLoader
+#undef INTERFACE
+#define INTERFACE IDirectMusicLoader
 #define IDirectMusicLoader_METHODS \
     /*** IDirectMusicLoader methods ***/ \
-    ICOM_METHOD3(HRESULT, _GetObject, LPDMUS_OBJECTDESC,pDesc, REFIID,riid, LPVOID*,ppv) \
-    ICOM_METHOD1(HRESULT, SetObject, LPDMUS_OBJECTDESC,pDesc) \
-    ICOM_METHOD3(HRESULT, SetSearchDirectory, REFGUID,rguidClass, WCHAR*,pwzPath, BOOL,fClear) \
-    ICOM_METHOD3(HRESULT, ScanDirectory, REFGUID,rguidClass, WCHAR*,pwzFileExtension, WCHAR*,pwzScanFileName) \
-    ICOM_METHOD1(HRESULT, CacheObject, IDirectMusicObject*,pObject) \
-    ICOM_METHOD1(HRESULT, ReleaseObject, IDirectMusicObject*,pObject) \
-    ICOM_METHOD1(HRESULT, ClearCache, REFGUID,rguidClass) \
-    ICOM_METHOD2(HRESULT, EnableCache, REFGUID,rguidClass, BOOL,fEnable) \
-    ICOM_METHOD3(HRESULT, EnumObject, REFGUID,rguidClass, DWORD,dwIndex, LPDMUS_OBJECTDESC,pDesc)
+    STDMETHOD(_GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE; \
+    STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE; \
+    STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE; \
+    STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE; \
+    STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE; \
+    STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE; \
+    STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE; \
+    STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE; \
+    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
 
     /*** IDirectMusicLoader methods ***/
 #define IDirectMusicLoader_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicLoader_METHODS
 ICOM_DEFINE(IDirectMusicLoader,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicLoader_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -890,13 +890,13 @@
 /*****************************************************************************
  * IDirectMusicLoader8 interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicLoader8
+#undef INTERFACE
+#define INTERFACE IDirectMusicLoader8
 #define IDirectMusicLoader8_METHODS \
     /*** IDirectMusicLoader8 methods ***/ \
-    ICOM_METHOD (void, CollectGarbage) \
-    ICOM_METHOD1(HRESULT, ReleaseObjectByUnknown, IUnknown*,pObject) \
-    ICOM_METHOD4(HRESULT, LoadObjectFromFile, REFGUID,rguidClassID, REFIID,iidInterfaceID, WCHAR*,pwzFilePath, void**,ppObject)
+    STDMETHOD_(void,CollectGarbage)(THIS) PURE; \
+    STDMETHOD(ReleaseObjectByUnknown)(THIS_ IUnknown *pObject) PURE; \
+    STDMETHOD(LoadObjectFromFile)(THIS_ REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR *pwzFilePath, void **ppObject) PURE;
 
     /*** IDirectMusicLoader8 methods ***/
 #define IDirectMusicLoader8_IMETHODS \
@@ -904,7 +904,7 @@
     IDirectMusicLoader_METHODS \
 	IDirectMusicLoader8_METHODS
 ICOM_DEFINE(IDirectMusicLoader8,IDirectMusicLoader)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicLoader8_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -929,18 +929,18 @@
 /*****************************************************************************
  * IDirectMusicGetLoader interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicGetLoader
+#undef INTERFACE
+#define INTERFACE IDirectMusicGetLoader
 #define IDirectMusicGetLoader_METHODS \
     /*** IDirectMusicGetLoader methods ***/ \
-    ICOM_METHOD1(HRESULT, GetLoader, IDirectMusicLoader**,ppLoader)
+    STDMETHOD(GetLoader)(THIS_ IDirectMusicLoader **ppLoader) PURE;
 
     /*** IDirectMusicGetLoader methods ***/
 #define IDirectMusicGetLoader_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicGetLoader_METHODS
 ICOM_DEFINE(IDirectMusicGetLoader,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicGetLoader_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -953,40 +953,40 @@
 /*****************************************************************************
  * IDirectMusicSegment interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicSegment
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegment
 #define IDirectMusicSegment_METHODS \
     /*** IDirectMusicSegment methods ***/ \
-    ICOM_METHOD1(HRESULT, GetLength, MUSIC_TIME*,pmtLength) \
-    ICOM_METHOD1(HRESULT, SetLength, MUSIC_TIME,mtLength) \
-    ICOM_METHOD1(HRESULT, GetRepeats, DWORD*,pdwRepeats) \
-    ICOM_METHOD1(HRESULT, SetRepeats, DWORD,dwRepeats) \
-    ICOM_METHOD1(HRESULT, GetDefaultResolution, DWORD*,pdwResolution) \
-    ICOM_METHOD1(HRESULT, SetDefaultResolution, DWORD,dwResolution) \
-    ICOM_METHOD4(HRESULT, GetTrack, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, IDirectMusicTrack**,ppTrack) \
-    ICOM_METHOD2(HRESULT, GetTrackGroup, IDirectMusicTrack*,pTrack, DWORD*,pdwGroupBits) \
-    ICOM_METHOD2(HRESULT, InsertTrack, IDirectMusicTrack*,pTrack, DWORD,dwGroupBits) \
-    ICOM_METHOD1(HRESULT, RemoveTrack, IDirectMusicTrack*,pTrack) \
-    ICOM_METHOD3(HRESULT, InitPlay, IDirectMusicSegmentState**,ppSegState, IDirectMusicPerformance*,pPerformance, DWORD, dwFlags) \
-    ICOM_METHOD1(HRESULT, GetGraph, IDirectMusicGraph**,ppGraph) \
-    ICOM_METHOD1(HRESULT, SetGraph, IDirectMusicGraph*,pGraph) \
-    ICOM_METHOD1(HRESULT, AddNotificationType, REFGUID,rguidNotificationType) \
-    ICOM_METHOD1(HRESULT, RemoveNotificationType, REFGUID,rguidNotificationType) \
-    ICOM_METHOD6(HRESULT, GetParam, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, MUSIC_TIME*,pmtNext, void*,pParam) \
-    ICOM_METHOD5(HRESULT, SetParam, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, void*,pParam) \
-    ICOM_METHOD3(HRESULT, Clone, MUSIC_TIME,mtStart, MUSIC_TIME,mtEnd, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD1(HRESULT, SetStartPoint, MUSIC_TIME,mtStart) \
-    ICOM_METHOD1(HRESULT, GetStartPoint, MUSIC_TIME*,pmtStart) \
-    ICOM_METHOD2(HRESULT, SetLoopPoints, MUSIC_TIME,mtStart, MUSIC_TIME,mtEnd) \
-    ICOM_METHOD2(HRESULT, GetLoopPoints, MUSIC_TIME*,pmtStart, MUSIC_TIME*,pmtEnd) \
-    ICOM_METHOD2(HRESULT, SetPChannelsUsed, DWORD,dwNumPChannels, DWORD*,paPChannels)
+    STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE; \
+    STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE; \
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; \
+    STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE; \
+    STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE; \
+    STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE; \
+    STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE; \
+    STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE; \
+    STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE; \
+    STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE; \
+    STDMETHOD(InitPlay)(THIS_ IDirectMusicSegmentState **ppSegState, IDirectMusicPerformance *pPerformance, DWORD  dwFlags) PURE; \
+    STDMETHOD(GetGraph)(THIS_ IDirectMusicGraph **ppGraph) PURE; \
+    STDMETHOD(SetGraph)(THIS_ IDirectMusicGraph *pGraph) PURE; \
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; \
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; \
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; \
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; \
+    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE; \
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE; \
+    STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE; \
+    STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE; \
+    STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;
 
     /*** IDirectMusicSegment methods ***/
 #define IDirectMusicSegment_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicSegment_METHODS
 ICOM_DEFINE(IDirectMusicSegment,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicSegment_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -1021,15 +1021,15 @@
 /*****************************************************************************
  * IDirectMusicSegment8 interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicSegment8
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegment8
 #define IDirectMusicSegment8_METHODS \
     /*** IDirectMusicSegment8 methods ***/ \
-    ICOM_METHOD5(HRESULT, SetTrackConfig, REFGUID,rguidTrackClassID, DWORD,dwGroupBits, DWORD,dwIndex, DWORD,dwFlagsOn, DWORD,dwFlagsOff) \
-    ICOM_METHOD1(HRESULT, GetAudioPathConfig, IUnknown**,ppAudioPathConfig) \
-    ICOM_METHOD4(HRESULT, Compose, MUSIC_TIME,mtTime, IDirectMusicSegment*,pFromSegment, IDirectMusicSegment*,pToSegment, IDirectMusicSegment**,ppComposedSegment) \
-    ICOM_METHOD1(HRESULT, Download, IUnknown,*pAudioPath) \
-    ICOM_METHOD1(HRESULT, Unload, IUnknown,*pAudioPath)
+    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE; \
+    STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE; \
+    STDMETHOD(Compose)(THIS_ MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) PURE; \
+    STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE; \
+    STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE;
 
     /*** IDirectMusicSegment8 methods ***/
 #define IDirectMusicSegment8_IMETHODS \
@@ -1037,7 +1037,7 @@
     IDirectMusicSegment_METHODS \
 	IDirectMusicSegment8_METHODS
 ICOM_DEFINE(IDirectMusicSegment8,IDirectMusicSegment)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicSegment8_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -1078,22 +1078,22 @@
 /*****************************************************************************
  * IDirectMusicSegmentState interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicSegmentState
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegmentState
 #define IDirectMusicSegmentState_METHODS \
     /*** IDirectMusicSegmentState methods ***/ \
-    ICOM_METHOD1(HRESULT, GetRepeats,  DWORD*,pdwRepeats) \
-    ICOM_METHOD1(HRESULT, GetSegment, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD1(HRESULT, GetStartTime, MUSIC_TIME*,pmtStart) \
-    ICOM_METHOD1(HRESULT, GetSeek, MUSIC_TIME*,pmtSeek) \
-    ICOM_METHOD1(HRESULT, GetStartPoint, MUSIC_TIME*,pmtStart)
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE; \
+    STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE; \
+    STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE; \
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
 
     /*** IDirectMusicSegmentState methods ***/
 #define IDirectMusicSegmentState_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicSegmentState_METHODS
 ICOM_DEFINE(IDirectMusicSegmentState,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicSegmentState_QueryInterface(p,a,b)		ICOM_CALL2(QueryInterface,p,a,b)
@@ -1110,12 +1110,12 @@
 /*****************************************************************************
  * IDirectMusicSegmentState8 interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicSegmentState8
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegmentState8
 #define IDirectMusicSegmentState8_METHODS \
     /*** IDirectMusicSegmentState8 methods ***/ \
-    ICOM_METHOD5(HRESULT, SetTrackConfig, REFGUID,rguidTrackClassID, DWORD,dwGroupBits, DWORD,dwIndex, DWORD,dwFlagsOn, DWORD,dwFlagsOff) \
-    ICOM_METHOD7(HRESULT, GetObjectInPath, DWORD,dwPChannel, DWORD,dwStage, DWORD,dwBuffer, REFGUID,guidObject, DWORD,dwIndex, REFGUID,iidInterface, void**,ppObject)
+    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE; \
+    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;
 
     /*** IDirectMusicSegmentState8 methods ***/
 #define IDirectMusicSegmentState8_IMETHODS \
@@ -1123,7 +1123,7 @@
     IDirectMusicSegmentState_METHODS \
     IDirectMusicSegmentState8_METHODS
 ICOM_DEFINE(IDirectMusicSegmentState8,IDirectMusicSegmentState)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicSegmentState8_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1143,21 +1143,21 @@
 /*****************************************************************************
  * IDirectMusicAudioPath interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicAudioPath
+#undef INTERFACE
+#define INTERFACE IDirectMusicAudioPath
 #define IDirectMusicAudioPath_METHODS \
     /*** IDirectMusicAudioPath methods ***/ \
-    ICOM_METHOD7(HRESULT, GetObjectInPath, DWORD,dwPChannel, DWORD,dwStage, DWORD,dwBuffer, REFGUID,guidObject, WORD,dwIndex, REFGUID,iidInterface, void**,ppObject) \
-    ICOM_METHOD1(HRESULT, Activate, BOOL,fActivate) \
-    ICOM_METHOD2(HRESULT, SetVolume, long,lVolume, DWORD,dwDuration) \
-    ICOM_METHOD2(HRESULT, ConvertPChannel, DWORD,dwPChannelIn, DWORD*,pdwPChannelOut)
+    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void **ppObject) PURE; \
+    STDMETHOD(Activate)(THIS_ BOOL fActivate) PURE; \
+    STDMETHOD(SetVolume)(THIS_ long lVolume, DWORD dwDuration) PURE; \
+    STDMETHOD(ConvertPChannel)(THIS_ DWORD dwPChannelIn, DWORD *pdwPChannelOut) PURE;
 
     /*** IDirectMusicAudioPath methods ***/
 #define IDirectMusicAudioPath_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicAudioPath_METHODS
 ICOM_DEFINE(IDirectMusicAudioPath,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicAudioPath_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1173,58 +1173,58 @@
 /*****************************************************************************
  * IDirectMusicPerformance interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicPerformance
+#undef INTERFACE
+#define INTERFACE IDirectMusicPerformance
 #define IDirectMusicPerformance_METHODS \
     /*** IDirectMusicPerformance methods ***/ \
-    ICOM_METHOD3(HRESULT, Init, IDirectMusic**,ppDirectMusic, LPDIRECTSOUND,pDirectSound, HWND,hWnd) \
-    ICOM_METHOD4(HRESULT, PlaySegment, IDirectMusicSegment*,pSegment, DWORD,dwFlags, __int64,i64StartTime, IDirectMusicSegmentState**,ppSegmentState) \
-    ICOM_METHOD4(HRESULT, Stop, IDirectMusicSegment*,pSegment, IDirectMusicSegmentState*,pSegmentState, MUSIC_TIME,mtTime, DWORD,dwFlags) \
-    ICOM_METHOD2(HRESULT, GetSegmentState, IDirectMusicSegmentState**,ppSegmentState, MUSIC_TIME,mtTime) \
-    ICOM_METHOD1(HRESULT, SetPrepareTime, DWORD,dwMilliSeconds) \
-    ICOM_METHOD1(HRESULT, GetPrepareTime, DWORD*,pdwMilliSeconds) \
-    ICOM_METHOD1(HRESULT, SetBumperLength, DWORD,dwMilliSeconds) \
-    ICOM_METHOD1(HRESULT, GetBumperLength, DWORD*,pdwMilliSeconds) \
-    ICOM_METHOD1(HRESULT, SendPMsg, DMUS_PMSG*,pPMSG) \
-    ICOM_METHOD2(HRESULT, MusicToReferenceTime, MUSIC_TIME,mtTime, REFERENCE_TIME*,prtTime) \
-    ICOM_METHOD2(HRESULT, ReferenceToMusicTime, REFERENCE_TIME,rtTime, MUSIC_TIME*,pmtTime) \
-    ICOM_METHOD2(HRESULT, IsPlaying, IDirectMusicSegment*,pSegment, IDirectMusicSegmentState*,pSegState) \
-    ICOM_METHOD2(HRESULT, GetTime, REFERENCE_TIME*,prtNow, MUSIC_TIME*,pmtNow) \
-    ICOM_METHOD2(HRESULT, AllocPMsg, ULONG,cb, DMUS_PMSG**,ppPMSG) \
-    ICOM_METHOD1(HRESULT, FreePMsg, DMUS_PMSG*,pPMSG) \
-    ICOM_METHOD1(HRESULT, GetGraph, IDirectMusicGraph**,ppGraph) \
-    ICOM_METHOD1(HRESULT, SetGraph, IDirectMusicGraph*,pGraph) \
-    ICOM_METHOD2(HRESULT, SetNotificationHandle, HANDLE,hNotification, REFERENCE_TIME,rtMinimum) \
-    ICOM_METHOD1(HRESULT, GetNotificationPMsg, DMUS_NOTIFICATION_PMSG**,ppNotificationPMsg) \
-    ICOM_METHOD1(HRESULT, AddNotificationType, REFGUID,rguidNotificationType) \
-    ICOM_METHOD1(HRESULT, RemoveNotificationType, REFGUID,rguidNotificationType) \
-    ICOM_METHOD1(HRESULT, AddPort, IDirectMusicPort*,pPort) \
-    ICOM_METHOD1(HRESULT, RemovePort, IDirectMusicPort*,pPort) \
-    ICOM_METHOD3(HRESULT, AssignPChannelBlock, DWORD,dwBlockNum, IDirectMusicPort*,pPort, DWORD,dwGroup) \
-    ICOM_METHOD4(HRESULT, AssignPChannel, DWORD,dwPChannel, IDirectMusicPort*,pPort, DWORD,dwGroup, DWORD,dwMChannel) \
-    ICOM_METHOD4(HRESULT, PChannelInfo, DWORD,dwPChannel, IDirectMusicPort**,ppPort, DWORD*,pdwGroup, DWORD*,pdwMChannel) \
-    ICOM_METHOD8(HRESULT, DownloadInstrument, IDirectMusicInstrument*,pInst, DWORD,dwPChannel, IDirectMusicDownloadedInstrument**,ppDownInst, DMUS_NOTERANGE*,pNoteRanges, DWORD,dwNumNoteRanges, IDirectMusicPort**,ppPort, DWORD*,pdwGroup, DWORD*,pdwMChannel) \
-    ICOM_METHOD2(HRESULT, Invalidate, MUSIC_TIME,mtTime, DWORD,dwFlags) \
-    ICOM_METHOD6(HRESULT, GetParam, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, MUSIC_TIME*,pmtNext, void*,pParam) \
-    ICOM_METHOD5(HRESULT, SetParam, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, void*,pParam) \
-    ICOM_METHOD3(HRESULT, GetGlobalParam, REFGUID,rguidType, void*,pParam, DWORD,dwSize) \
-    ICOM_METHOD3(HRESULT, SetGlobalParam, REFGUID,rguidType, void*,pParam, DWORD,dwSize) \
-    ICOM_METHOD1(HRESULT, GetLatencyTime, REFERENCE_TIME*,prtTime) \
-    ICOM_METHOD1(HRESULT, GetQueueTime, REFERENCE_TIME*,prtTime) \
-    ICOM_METHOD1(HRESULT, AdjustTime, REFERENCE_TIME,rtAmount) \
-    ICOM_METHOD (HRESULT, CloseDown) \
-    ICOM_METHOD3(HRESULT, GetResolvedTime, REFERENCE_TIME,rtTime, REFERENCE_TIME*,prtResolved, DWORD,dwTimeResolveFlags) \
-    ICOM_METHOD5(HRESULT, MIDIToMusic, BYTE,bMIDIValue, DMUS_CHORD_KEY*,pChord, BYTE,bPlayMode, BYTE,bChordLevel, WORD*,pwMusicValue) \
-    ICOM_METHOD5(HRESULT, MusicToMIDI, WORD,wMusicValue, DMUS_CHORD_KEY*,pChord, BYTE,bPlayMode, BYTE,bChordLevel, BYTE*,pbMIDIValue) \
-    ICOM_METHOD6(HRESULT, TimeToRhythm, MUSIC_TIME,mtTime, DMUS_TIMESIGNATURE*,pTimeSig, WORD*,pwMeasure, BYTE*,pbBeat, BYTE*,pbGrid, short*,pnOffset) \
-    ICOM_METHOD6(HRESULT, RhythmToTime, WORD,wMeasure, BYTE,bBeat, BYTE,bGrid, short,nOffset, DMUS_TIMESIGNATURE*,pTimeSig, MUSIC_TIME*,pmtTime)
+    STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE; \
+    STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE; \
+    STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE; \
+    STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE; \
+    STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE; \
+    STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE; \
+    STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE; \
+    STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE; \
+    STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; \
+    STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE; \
+    STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE; \
+    STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE; \
+    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE; \
+    STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE; \
+    STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; \
+    STDMETHOD(GetGraph)(THIS_ IDirectMusicGraph **ppGraph) PURE; \
+    STDMETHOD(SetGraph)(THIS_ IDirectMusicGraph *pGraph) PURE; \
+    STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE; \
+    STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE; \
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; \
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE; \
+    STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE; \
+    STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE; \
+    STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE; \
+    STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE; \
+    STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; \
+    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE; \
+    STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE; \
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; \
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE; \
+    STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; \
+    STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE; \
+    STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE; \
+    STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE; \
+    STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE; \
+    STDMETHOD(CloseDown)(THIS) PURE; \
+    STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE; \
+    STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE; \
+    STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE; \
+    STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE; \
+    STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;
 
     /*** IDirectMusicPerformance methods ***/
 #define IDirectMusicPerformance_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicPerformance_METHODS
 ICOM_DEFINE(IDirectMusicPerformance,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicPerformance_QueryInterface(p,a,b)					ICOM_CALL2(QueryInterface,p,a,b)
@@ -1277,19 +1277,19 @@
 /*****************************************************************************
  * IDirectMusicPerformance8 interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicPerformance8
+#undef INTERFACE
+#define INTERFACE IDirectMusicPerformance8
 #define IDirectMusicPerformance8_METHODS \
     /*** IDirectMusicPerformance8 methods ***/ \
-    ICOM_METHOD7(HRESULT, InitAudio, IDirectMusic**,ppDirectMusic, IDirectSound**,ppDirectSound, HWND,hWnd, DWORD,dwDefaultPathType, DWORD,dwPChannelCount, DWORD,dwFlags, DMUS_AUDIOPARAMS*,pParams) \
-    ICOM_METHOD8(HRESULT, PlaySegmentEx, IUnknown*,pSource, WCHAR*,pwzSegmentName, IUnknown*,pTransition, DWORD,dwFlags, __int64,i64StartTime, IDirectMusicSegmentState**,ppSegmentState, IUnknown*,pFrom, IUnknown*,pAudioPath) \
-    ICOM_METHOD3(HRESULT, StopEx, IUnknown*,pObjectToStop, __int64,i64StopTime, DWORD,dwFlags) \
-    ICOM_METHOD2(HRESULT, ClonePMsg, DMUS_PMSG*,pSourcePMSG, DMUS_PMSG**,ppCopyPMSG) \
-    ICOM_METHOD3(HRESULT, CreateAudioPath, IUnknown*,pSourceConfig, BOOL,fActivate, IDirectMusicAudioPath**,ppNewPath) \
-    ICOM_METHOD4(HRESULT, CreateStandardAudioPath, DWORD,dwType, DWORD,dwPChannelCount, BOOL,fActivate, IDirectMusicAudioPath**,ppNewPath) \
-    ICOM_METHOD1(HRESULT, SetDefaultAudioPath, IDirectMusicAudioPath*,pAudioPath) \
-    ICOM_METHOD1(HRESULT, GetDefaultAudioPath, IDirectMusicAudioPath**,ppAudioPath) \
-    ICOM_METHOD7(HRESULT, GetParamEx, REFGUID,rguidType, DWORD,dwTrackID, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, MUSIC_TIME*,pmtNext, void*,pParam)
+    STDMETHOD(InitAudio)(THIS_ IDirectMusic **ppDirectMusic, IDirectSound **ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS *pParams) PURE; \
+    STDMETHOD(PlaySegmentEx)(THIS_ IUnknown *pSource, WCHAR *pwzSegmentName, IUnknown *pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState, IUnknown *pFrom, IUnknown *pAudioPath) PURE; \
+    STDMETHOD(StopEx)(THIS_ IUnknown *pObjectToStop, __int64 i64StopTime, DWORD dwFlags) PURE; \
+    STDMETHOD(ClonePMsg)(THIS_ DMUS_PMSG *pSourcePMSG, DMUS_PMSG **ppCopyPMSG) PURE; \
+    STDMETHOD(CreateAudioPath)(THIS_ IUnknown *pSourceConfig, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE; \
+    STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE; \
+    STDMETHOD(SetDefaultAudioPath)(THIS_ IDirectMusicAudioPath *pAudioPath) PURE; \
+    STDMETHOD(GetDefaultAudioPath)(THIS_ IDirectMusicAudioPath **ppAudioPath) PURE; \
+    STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
 
     /*** IDirectMusicPerformance8 methods ***/
 #define IDirectMusicPerformance8_IMETHODS \
@@ -1297,7 +1297,7 @@
     IDirectMusicPerformance_METHODS \
     IDirectMusicPerformance8_METHODS
 ICOM_DEFINE(IDirectMusicPerformance8,IDirectMusicPerformance)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicPerformance8_QueryInterface(p,a,b)					ICOM_CALL2(QueryInterface,p,a,b)
@@ -1360,21 +1360,21 @@
 /*****************************************************************************
  * IDirectMusicGraph interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicGraph
+#undef INTERFACE
+#define INTERFACE IDirectMusicGraph
 #define IDirectMusicGraph_METHODS \
     /*** IDirectMusicGraph methods ***/ \
-    ICOM_METHOD1(HRESULT, StampPMsg, DMUS_PMSG*,pPMSG) \
-    ICOM_METHOD4(HRESULT, InsertTool, IDirectMusicTool*,pTool, DWORD*,pdwPChannels, DWORD,cPChannels, LONG,lIndex) \
-    ICOM_METHOD2(HRESULT, GetTool, DWORD,dwIndex, IDirectMusicTool**,ppTool) \
-    ICOM_METHOD1(HRESULT, RemoveTool, IDirectMusicTool*,pTool)
+    STDMETHOD(StampPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE; \
+    STDMETHOD(InsertTool)(THIS_ IDirectMusicTool *pTool, DWORD *pdwPChannels, DWORD cPChannels, LONG lIndex) PURE; \
+    STDMETHOD(GetTool)(THIS_ DWORD dwIndex, IDirectMusicTool **ppTool) PURE; \
+    STDMETHOD(RemoveTool)(THIS_ IDirectMusicTool *pTool) PURE;
 
     /*** IDirectMusicGraph methods ***/
 #define IDirectMusicGraph_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicGraph_METHODS
 ICOM_DEFINE(IDirectMusicGraph,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicGraph_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1390,28 +1390,28 @@
 /*****************************************************************************
  * IDirectMusicStyle interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicStyle
+#undef INTERFACE
+#define INTERFACE IDirectMusicStyle
 #define IDirectMusicStyle_METHODS \
     /*** IDirectMusicStyle methods ***/ \
-    ICOM_METHOD2(HRESULT, GetBand, WCHAR*,pwszName, IDirectMusicBand**,ppBand) \
-    ICOM_METHOD2(HRESULT, EnumBand, DWORD,dwIndex, WCHAR*,pwszName) \
-    ICOM_METHOD1(HRESULT, GetDefaultBand, IDirectMusicBand**,ppBand) \
-    ICOM_METHOD2(HRESULT, EnumMotif, DWORD,dwIndex, WCHAR*,pwszName) \
-    ICOM_METHOD2(HRESULT, GetMotif, WCHAR*,pwszName, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD1(HRESULT, GetDefaultChordMap, IDirectMusicChordMap**,ppChordMap) \
-    ICOM_METHOD2(HRESULT, EnumChordMap, DWORD,dwIndex, WCHAR*,pwszName) \
-    ICOM_METHOD2(HRESULT, GetChordMap, WCHAR*,pwszName, IDirectMusicChordMap**,ppChordMap) \
-    ICOM_METHOD1(HRESULT, GetTimeSignature, DMUS_TIMESIGNATURE*,pTimeSig) \
-    ICOM_METHOD4(HRESULT, GetEmbellishmentLength, DWORD,dwType, DWORD,dwLevel, DWORD*,pdwMin, DWORD*,pdwMax) \
-    ICOM_METHOD1(HRESULT, GetTempo, double*,pTempo)
+    STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE; \
+    STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; \
+    STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE; \
+    STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; \
+    STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(GetDefaultChordMap)(THIS_ IDirectMusicChordMap **ppChordMap) PURE; \
+    STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; \
+    STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, IDirectMusicChordMap **ppChordMap) PURE; \
+    STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE; \
+    STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE; \
+    STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;
 
     /*** IDirectMusicStyle methods ***/
 #define IDirectMusicStyle_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicStyle_METHODS
 ICOM_DEFINE(IDirectMusicStyle,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicStyle_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1434,11 +1434,11 @@
 /*****************************************************************************
  * IDirectMusicStyle8 interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicStyle8
+#undef INTERFACE
+#define INTERFACE IDirectMusicStyle8
 #define IDirectMusicStyle8_METHODS \
     /*** IDirectMusicStyle8 methods ***/ \
-    ICOM_METHOD3(HRESULT, EnumPattern, DWORD,dwIndex, DWORD,dwPatternType, WCHAR*,pwszName)
+    STDMETHOD(EnumPattern)(THIS_ DWORD dwIndex, DWORD dwPatternType, WCHAR *pwszName) PURE;
 
     /*** IDirectMusicStyle8 methods ***/
 #define IDirectMusicStyle8_IMETHODS \
@@ -1446,7 +1446,7 @@
     IDirectMusicStyle_METHODS \
     IDirectMusicStyle8_METHODS
 ICOM_DEFINE(IDirectMusicStyle8,IDirectMusicStyle)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicStyle8_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1471,18 +1471,18 @@
 /*****************************************************************************
  * IDirectMusicChordMap interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicChordMap
+#undef INTERFACE
+#define INTERFACE IDirectMusicChordMap
 #define IDirectMusicChordMap_METHODS \
     /*** IDirectMusicChordMap methods ***/ \
-    ICOM_METHOD1(HRESULT, GetScale, DWORD*,pdwScale)
+    STDMETHOD(GetScale)(THIS_ DWORD *pdwScale) PURE;
 
     /*** IDirectMusicChordMap methods ***/
 #define IDirectMusicChordMap_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicChordMap_METHODS
 ICOM_DEFINE(IDirectMusicChordMap,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicChordMap_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -1495,23 +1495,23 @@
 /*****************************************************************************
  * IDirectMusicComposer interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicComposer
+#undef INTERFACE
+#define INTERFACE IDirectMusicComposer
 #define IDirectMusicComposer_METHODS \
     /*** IDirectMusicComposer methods ***/ \
-    ICOM_METHOD5(HRESULT, ComposeSegmentFromTemplate, IDirectMusicStyle*,pStyle, IDirectMusicSegment*,pTemplate, WORD,wActivity, IDirectMusicChordMap*,pChordMap, IDirectMusicSegment**,ppSegment) \
-	ICOM_METHOD8(HRESULT, ComposeSegmentFromShape, IDirectMusicStyle*,pStyle, WORD,wNumMeasures, WORD,wShape, WORD,wActivity, BOOL,fIntro, BOOL,fEnd, IDirectMusicChordMap*,pChordMap, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD7(HRESULT, ComposeTransition, IDirectMusicSegment*,pFromSeg, IDirectMusicSegment*,pToSeg, MUSIC_TIME,mtTime, WORD,wCommand, DWORD,dwFlags, IDirectMusicChordMap*,pChordMap, IDirectMusicSegment**,ppTransSeg) \
-    ICOM_METHOD8(HRESULT, AutoTransition, IDirectMusicPerformance*,pPerformance, IDirectMusicSegment*,pToSeg, WORD,wCommand, DWORD,dwFlags, IDirectMusicChordMap*,pChordMap, IDirectMusicSegment**,ppTransSeg, IDirectMusicSegmentState**,ppToSegState, IDirectMusicSegmentState**,ppTransSegState) \
-    ICOM_METHOD6(HRESULT, ComposeTemplateFromShape, WORD,wNumMeasures, WORD,wShape, BOOL,fIntro, BOOL,fEnd, WORD,wEndLength, IDirectMusicSegment**,ppTemplate) \
-    ICOM_METHOD3(HRESULT, ChangeChordMap, IDirectMusicSegment*,pSegment, BOOL,fTrackScale, IDirectMusicChordMap*,pChordMap)
+    STDMETHOD(ComposeSegmentFromTemplate)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(ComposeSegmentFromShape)(THIS_ IDirectMusicStyle *pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(ComposeTransition)(THIS_ IDirectMusicSegment *pFromSeg, IDirectMusicSegment *pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg) PURE; \
+    STDMETHOD(AutoTransition)(THIS_ IDirectMusicPerformance *pPerformance, IDirectMusicSegment *pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg, IDirectMusicSegmentState **ppToSegState, IDirectMusicSegmentState **ppTransSegState) PURE; \
+    STDMETHOD(ComposeTemplateFromShape)(THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment **ppTemplate) PURE; \
+    STDMETHOD(ChangeChordMap)(THIS_ IDirectMusicSegment *pSegment, BOOL fTrackScale, IDirectMusicChordMap *pChordMap) PURE;
 
     /*** IDirectMusicComposer methods ***/
 #define IDirectMusicComposer_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicComposer_METHODS
 ICOM_DEFINE(IDirectMusicComposer,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicComposer_QueryInterface(p,a,b)						ICOM_CALL2(QueryInterface,p,a,b)
@@ -1529,20 +1529,20 @@
 /*****************************************************************************
  * IDirectMusicPatternTrack interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicPatternTrack
+#undef INTERFACE
+#define INTERFACE IDirectMusicPatternTrack
 #define IDirectMusicPatternTrack_METHODS \
     /*** IDirectMusicPatternTrack methods ***/ \
-    ICOM_METHOD2(HRESULT, CreateSegment, IDirectMusicStyle*,pStyle, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD3(HRESULT, SetVariation, IDirectMusicSegmentState*,pSegState, DWORD,dwVariationFlags, DWORD,dwPart) \
-    ICOM_METHOD5(HRESULT, SetPatternByName, IDirectMusicSegmentState*,pSegState, WCHAR*,wszName, IDirectMusicStyle*,pStyle, DWORD,dwPatternType, DWORD*,pdwLength)
+    STDMETHOD(CreateSegment)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(SetVariation)(THIS_ IDirectMusicSegmentState *pSegState, DWORD dwVariationFlags, DWORD dwPart) PURE; \
+    STDMETHOD(SetPatternByName)(THIS_ IDirectMusicSegmentState *pSegState, WCHAR *wszName, IDirectMusicStyle *pStyle, DWORD dwPatternType, DWORD *pdwLength) PURE;
 
     /*** IDirectMusicPatternTrack methods ***/
 #define IDirectMusicPatternTrack_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicPatternTrack_METHODS
 ICOM_DEFINE(IDirectMusicPatternTrack,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicPatternTrack_QueryInterface(p,a,b)			ICOM_CALL2(QueryInterface,p,a,b)
@@ -1557,27 +1557,27 @@
 /*****************************************************************************
  * IDirectMusicScript interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicScript
+#undef INTERFACE
+#define INTERFACE IDirectMusicScript
 #define IDirectMusicScript_METHODS \
     /*** IDirectMusicScript methods ***/ \
-    ICOM_METHOD2(HRESULT, Init, IDirectMusicPerformance*,pPerformance, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD2(HRESULT, CallRoutine, WCHAR*,pwszRoutineName, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD4(HRESULT, SetVariableVariant, WCHAR*,pwszVariableName, VARIANT,varValue, BOOL,fSetRef, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD3(HRESULT, GetVariableVariant, WCHAR*,pwszVariableName, VARIANT*,pvarValue, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD3(HRESULT, SetVariableNumber, WCHAR*,pwszVariableName, LONG,lValue, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD3(HRESULT, GetVariableNumber, WCHAR*,pwszVariableName, LONG*,plValue, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD3(HRESULT, SetVariableObject, WCHAR*,pwszVariableName, IUnknown*,punkValue, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD4(HRESULT, GetVariableObject, WCHAR*,pwszVariableName, REFIID,riid, LPVOID*,ppv, DMUS_SCRIPT_ERRORINFO*,pErrorInfo) \
-    ICOM_METHOD2(HRESULT, EnumRoutine, DWORD,dwIndex, WCHAR*,pwszName) \
-    ICOM_METHOD2(HRESULT, EnumVariable, DWORD,dwIndex, WCHAR*,pwszName)
+    STDMETHOD(Init)(THIS_ IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(CallRoutine)(THIS_ WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(SetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(GetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(SetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(GetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(SetVariableObject)(THIS_ WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(GetVariableObject)(THIS_ WCHAR *pwszVariableName, REFIID riid, LPVOID *ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE; \
+    STDMETHOD(EnumRoutine)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE; \
+    STDMETHOD(EnumVariable)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
 
     /*** IDirectMusicScript methods ***/
 #define IDirectMusicScript_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicScript_METHODS
 ICOM_DEFINE(IDirectMusicScript,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicScript_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1599,18 +1599,18 @@
 /*****************************************************************************
  * IDirectMusicContainer interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicContainer
+#undef INTERFACE
+#define INTERFACE IDirectMusicContainer
 #define IDirectMusicContainer_METHODS \
     /*** IDirectMusicContainer methods ***/ \
-    ICOM_METHOD4(HRESULT, EnumObject, REFGUID,rguidClass, DWORD,dwIndex, LPDMUS_OBJECTDESC,pDesc, WCHAR*,pwszAlias)
+    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR *pwszAlias) PURE;
 
     /*** IDirectMusicContainer methods ***/
 #define IDirectMusicContainer_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicContainer_METHODS
 ICOM_DEFINE(IDirectMusicContainer,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicContainer_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)
@@ -1623,24 +1623,24 @@
 /*****************************************************************************
  * IDirectMusicSong interface
  */
-#undef ICOM_INTERFACE
-#define ICOM_INTERFACE IDirectMusicSong
+#undef INTERFACE
+#define INTERFACE IDirectMusicSong
 #define IDirectMusicSong_METHODS \
     /*** IDirectMusicSong methods ***/ \
-    ICOM_METHOD (HRESULT, Compose) \
-    ICOM_METHOD6(HRESULT, GetParam, REFGUID,rguidType, DWORD,dwGroupBits, DWORD,dwIndex, MUSIC_TIME,mtTime, MUSIC_TIME*,pmtNext, void*,pParam) \
-    ICOM_METHOD2(HRESULT, GetSegment, WCHAR*,pwzName, IDirectMusicSegment**,ppSegment) \
-    ICOM_METHOD1(HRESULT, GetAudioPathConfig, IUnknown**,ppAudioPathConfig) \
-    ICOM_METHOD1(HRESULT, Download, IUnknown*,pAudioPath) \
-    ICOM_METHOD1(HRESULT, Unload, IUnknown*,pAudioPath) \
-    ICOM_METHOD2(HRESULT, EnumSegment, DWORD,dwIndex, IDirectMusicSegment**,ppSegment)
+    STDMETHOD(Compose)(THIS) PURE; \
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; \
+    STDMETHOD(GetSegment)(THIS_ WCHAR *pwzName, IDirectMusicSegment **ppSegment) PURE; \
+    STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE; \
+    STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE; \
+    STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE; \
+    STDMETHOD(EnumSegment)(THIS_ DWORD dwIndex, IDirectMusicSegment **ppSegment) PURE;
 
     /*** IDirectMusicSong methods ***/
 #define IDirectMusicSong_IMETHODS \
     IUnknown_IMETHODS \
     IDirectMusicSong_METHODS
 ICOM_DEFINE(IDirectMusicSong,IUnknown)
-#undef ICOM_INTERFACE
+#undef INTERFACE
 
 /*** IUnknown methods ***/
 #define IDirectMusicSong_QueryInterface(p,a,b)				ICOM_CALL2(QueryInterface,p,a,b)