Building a small DirectX application with MinGW I ran into this error (again):
C:/DXSDK/include/dmdls.h:81: error: declaration of `WLOOP _DMUS_REGION::WLOOP[1]' C:/DXSDK/include/dls1.h:264: error: changes meaning of `WLOOP' from `typedef struct _rloop WLOOP'
I encountered this a few years ago (and completely forgot about it… almost). It took me a while to dig up the forum post where I had originally posted the solution to this problem. I’m bringing it back here so I can find it more easily. WLOOP is typedef’ed in dls1.h as:
typedef struct _rloop {
ULONG cbSize;
ULONG ulType; /* Loop Type */
ULONG ulStart; /* Start of loop in samples */
ULONG ulLength; /* Length of loop in samples */
} WLOOP, FAR *LPWLOOP;
The WLOOP type is used in a struct in dmdls.h:
typedef struct _DMUS_REGION
{
RGNRANGE RangeKey;
RGNRANGE RangeVelocity;
USHORT fusOptions;
USHORT usKeyGroup;
ULONG ulRegionArtIdx;
ULONG ulNextRegionIdx; /* If zero no more regions */
ULONG ulFirstExtCkIdx;
WAVELINK WaveLink;
WSMPL WSMP;
WLOOP WLOOP[1];
} DMUS_REGION;
It seems MinGW doesn’t like the member variable with the same name as its type. I changed the definition of the WLOOP member variable to use the actual type rather than the typedef’ed alias:
typedef struct _DMUS_REGION
{
...
// WLOOP WLOOP[1];
struct _rloop WLOOP[1];
} DMUS_REGION;
Hope this helps.]]>