Get rid of the non-standard Ixxx_METHODS macro definitions, declare
the interfaces explicitly instead.

diff --git a/include/dmusics.h b/include/dmusics.h
index 55e8b1c..a822c76 100644
--- a/include/dmusics.h
+++ b/include/dmusics.h
@@ -73,28 +73,32 @@
 /*****************************************************************************
  * IDirectMusicSynth interface
  */
-#undef  INTERFACE
 #define INTERFACE IDirectMusicSynth
-#define IDirectMusicSynth_METHODS \
-    IUnknown_METHODS \
-    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE; \
-    STDMETHOD(Close)(THIS) PURE; \
-    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE; \
-    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE; \
-    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE; \
-    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE; \
-    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE; \
-    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE; \
-    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE; \
-    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; \
-    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; \
-    STDMETHOD(SetSynthSink)(THIS_ IDirectMusicSynthSink *pSynthSink) PURE; \
-    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE; \
-    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE; \
-    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE; \
-    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE; \
+DECLARE_INTERFACE_(IDirectMusicSynth,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynth methods ***/
+    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SetSynthSink)(THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
+    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
     STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
-DECLARE_INTERFACE_(IDirectMusicSynth,IUnknown) { IDirectMusicSynth_METHODS };
+};
 #undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
@@ -126,16 +130,38 @@
 /*****************************************************************************
  * IDirectMusicSynth8 interface
  */
-#undef  INTERFACE
 #define INTERFACE IDirectMusicSynth8
-#define IDirectMusicSynth8_METHODS \
-    IDirectMusicSynth_METHODS \
-    STDMETHOD(PlayVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE; \
-    STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE; \
-    STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE; \
-    STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE; \
+DECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynth methods ***/
+    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SetSynthSink)(THIS_ IDirectMusicSynthSink *pSynthSink) PURE;
+    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
+    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+    /*** IDirectMusicSynth8 methods ***/
+    STDMETHOD(PlayVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE;
+    STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE;
+    STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE;
+    STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;
     STDMETHOD(AssignChannelToBuses)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;
-DECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth) { IDirectMusicSynth8_METHODS };
+};
 #undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
@@ -173,19 +199,23 @@
 /*****************************************************************************
  * IDirectMusicSynthSink interface
  */
-#undef  INTERFACE
 #define INTERFACE IDirectMusicSynthSink
-#define IDirectMusicSynthSink_METHODS \
-    IUnknown_METHODS \
-    STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE; \
-    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE; \
-    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; \
-    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE; \
-    STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE; \
-    STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE; \
-    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE; \
+DECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynthSink methods ***/
+    STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;
+    STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;
+    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
     STDMETHOD(GetDesiredBufferSize)(THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
-DECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown) { IDirectMusicSynthSink_METHODS };
+};
 #undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)