MinGW problem with WLOOP in DirectMusic

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.]]>

Related Posts

Leave a Reply