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.


Reply via email to