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.