[cfe-dev] CLang compiling windows.h from the Windows SDK

Jesse Towner townerj at gmail.com
Sun Aug 8 15:52:11 PDT 2010


interface is just a preprocessor macro, should be something like #define
interface struct nested in one the internal COM headers ComBase.h or
BaseTyps.h.

On Mon, 2010-08-09 at 00:41 +0200, Dimitry Andric wrote:
> On 2010-08-09 00:13, Christopher Jefferson wrote:
> >>> 3. CLang doesn't like:
> >>>    template<typename T> void** IID_PPV_ARGS_Helper(T** pp)
> >>>    {
> >>>       static_cast<IUnknown*>(*pp);            <=== clang error:
> >>> unknown type name 'IUnknown'
> >>>       return reinterpret_cast<void**>(pp);
> >>>    }
> >>> Note that 'IUnknown' is actually undefined at this point but MSVC accept it.
> >>
> >> Is it truly undeclared, or is it some kind of magic type? The former is very hard to deal with. 
> > 
> > It is truly undeclared, this is due to windows being lax on what it accepts in templates. However, with some careful consideration, clang could possibly consider making it a magic type, if there is only a very small number of such hacks required to parse windows.h. I haven't done a careful analysis of how many such examples there are.
> 
> Ehm, I have a file "Unknwn.h" in my Microsoft SDK dir, that defines
> IUnknown as:
> 
>   MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
>   IUnknown
>   {
>   public:
>   [...]
> 
> where MIDL_INTERFACE basically means "struct" (from MqOaI.h):
> 
>   #ifndef MIDL_INTERFACE
>   #if _MSC_VER >= 1100
>   #define MIDL_INTERFACE(x)   struct __declspec(uuid(x)) __declspec(novtable)
>   #else
>   #define MIDL_INTERFACE(x)   struct
>   #endif //_MSC_VER
>   #endif //MIDL_INTERFACE
> 
> The only declaration in Unknwn.h that I can't parse is this IUnknown
> forward declaration, again in Unknwn.h:
> 
>   #ifndef __IUnknown_FWD_DEFINED__
>   #define __IUnknown_FWD_DEFINED__
>   typedef interface IUnknown IUnknown;
>   #endif 	/* __IUnknown_FWD_DEFINED__ */
> 
> That "interface" keyword is probably something Microsoft-specific...
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev





More information about the cfe-dev mailing list