winelib include problem

Maarten Lankhorst m.b.lankhorst at gmail.com
Tue Aug 11 08:30:22 CDT 2009


Hi Jesse,

Jesse Allen schreef:
> Maartan,
>
> In a patch committed on 10 Jul 2008, includes: Add video mixing
> renderer header, it included a construct that autogenerates this piece
> of code for strmif.h
>
> "
> typedef struct tagVMRGUID {
>     GUID *pGUID;
>     GUID GUID;
> } VMRGUID;
> "
>
> Unfortunately any C++ file that includes that header seems to miscompile.
>
> "
> #include <strmif.h>
> "
>
> produces with wineg++
>
> In file included from blarg.c:1:
> /home/jesse/build/wine/include/strmif.h:8972: error: declaration of
> 'GUID tagVMRGUID::GUID'
> /home/jesse/build/wine/include/guiddef.h:31: error: changes meaning of
> 'GUID' from 'typedef struct _GUID GUID'
> winegcc: g++ failed
>
>
> This is also a problem in the DXSDK when compiling with g++, I
> suppose.  This is explained here:
> http://home.clara.net/raoulgough/vidmodem/dshow.html
>
> I tried patching the vmrender.idl similar to this:
> "
> typedef struct tagVMRGUID
> {
> #if defined(__cplusplus)
>     GUID *pGUID, ::GUID;
> #else
>     GUID *pGUID, GUID;
> #endif
> } VMRGUID;
> "
>   
Judging by that link you sent me, shouldn't it be:

typedef struct tagVMRGUID
{
#if defined(__cplusplus)
    ::GUID *pGUID, GUID;
#else
    GUID *pGUID, GUID;
#endif
} VMRGUID;

Or am i reading that link wrong?

> But no go.  It still produces the same problem.  Obviously you can't
> have the ::GUID prefixed and work on gcc as much as you can have the
> GUID GUID in g++.  But I think we will need it, otherwise I will just
> have to hack the strmif.h everytime.
>
> Can you take a look at the problem?  I think we will want this to work
> for winelib on g++ as it's pretty well dependent.
>   
Main problem is of course the msvc compiler doesn't have that problem, 
but if that ifdef works perhaps it's possible to have it like that.

Cheers,
Maarten.



More information about the wine-devel mailing list