/*** Autogenerated by WIDL 8.2 from include/windows.ui.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __windows_ui_h__
#define __windows_ui_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelper __x_ABI_CWindows_CUI_CIColorHelper;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelper ABI::Windows::UI::IColorHelper
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelper;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics ABI::Windows::UI::IColorHelperStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2 ABI::Windows::UI::IColorHelperStatics2
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics2;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColors __x_ABI_CWindows_CUI_CIColors;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColors ABI::Windows::UI::IColors
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColors;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorsStatics ABI::Windows::UI::IColorsStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorsStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContentRoot ABI::Windows::UI::IUIContentRoot
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContentRoot;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContext __x_ABI_CWindows_CUI_CIUIContext;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContext ABI::Windows::UI::IUIContext
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContext;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class ColorHelper;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CColorHelper __x_ABI_CWindows_CUI_CColorHelper;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CColorHelper_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class Colors;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CColors __x_ABI_CWindows_CUI_CColors;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CColors_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class UIContentRoot;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CUIContentRoot __x_ABI_CWindows_CUI_CUIContentRoot;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CUIContentRoot_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace UI {
            class UIContext;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CUI_CUIContext __x_ABI_CWindows_CUI_CUIContext;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CUI_CUIContext_FWD_DEFINED__ */

#ifndef ____FIIterable_1_Color_FWD_DEFINED__
#define ____FIIterable_1_Color_FWD_DEFINED__
typedef interface __FIIterable_1_Color __FIIterable_1_Color;
#ifdef __cplusplus
#define __FIIterable_1_Color ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_WindowId_FWD_DEFINED__
#define ____FIIterable_1_WindowId_FWD_DEFINED__
typedef interface __FIIterable_1_WindowId __FIIterable_1_WindowId;
#ifdef __cplusplus
#define __FIIterable_1_WindowId ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_Color_FWD_DEFINED__
#define ____FIIterator_1_Color_FWD_DEFINED__
typedef interface __FIIterator_1_Color __FIIterator_1_Color;
#ifdef __cplusplus
#define __FIIterator_1_Color ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_WindowId_FWD_DEFINED__
#define ____FIIterator_1_WindowId_FWD_DEFINED__
typedef interface __FIIterator_1_WindowId __FIIterator_1_WindowId;
#ifdef __cplusplus
#define __FIIterator_1_WindowId ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_WindowId_FWD_DEFINED__
#define ____FIVectorView_1_WindowId_FWD_DEFINED__
typedef interface __FIVectorView_1_WindowId __FIVectorView_1_WindowId;
#ifdef __cplusplus
#define __FIVectorView_1_WindowId ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIReference_1_Color_FWD_DEFINED__
#define ____FIReference_1_Color_FWD_DEFINED__
typedef interface __FIReference_1_Color __FIReference_1_Color;
#ifdef __cplusplus
#define __FIReference_1_Color ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __cplusplus
typedef struct __x_ABI_CWindows_CUI_CColor __x_ABI_CWindows_CUI_CColor;
#else /* __cplusplus */
namespace ABI {
    namespace Windows {
        namespace UI {
            typedef struct Color Color;
        }
    }
}
#endif /* __cplusplus */

#ifndef __cplusplus
typedef struct __x_ABI_CWindows_CUI_CWindowId __x_ABI_CWindows_CUI_CWindowId;
#else /* __cplusplus */
namespace ABI {
    namespace Windows {
        namespace UI {
            typedef struct WindowId WindowId;
        }
    }
}
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelper __x_ABI_CWindows_CUI_CIColorHelper;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelper ABI::Windows::UI::IColorHelper
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelper;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics ABI::Windows::UI::IColorHelperStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2 ABI::Windows::UI::IColorHelperStatics2
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorHelperStatics2;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColors __x_ABI_CWindows_CUI_CIColors;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColors ABI::Windows::UI::IColors
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColors;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIColorsStatics ABI::Windows::UI::IColorsStatics
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IColorsStatics;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContentRoot ABI::Windows::UI::IUIContentRoot
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContentRoot;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CUI_CIUIContext __x_ABI_CWindows_CUI_CIUIContext;
#ifdef __cplusplus
#define __x_ABI_CWindows_CUI_CIUIContext ABI::Windows::UI::IUIContext
namespace ABI {
    namespace Windows {
        namespace UI {
            interface IUIContext;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_Color_FWD_DEFINED__
#define ____FIIterable_1_Color_FWD_DEFINED__
typedef interface __FIIterable_1_Color __FIIterable_1_Color;
#ifdef __cplusplus
#define __FIIterable_1_Color ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterable_1_WindowId_FWD_DEFINED__
#define ____FIIterable_1_WindowId_FWD_DEFINED__
typedef interface __FIIterable_1_WindowId __FIIterable_1_WindowId;
#ifdef __cplusplus
#define __FIIterable_1_WindowId ABI::Windows::Foundation::Collections::IIterable<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_Color_FWD_DEFINED__
#define ____FIIterator_1_Color_FWD_DEFINED__
typedef interface __FIIterator_1_Color __FIIterator_1_Color;
#ifdef __cplusplus
#define __FIIterator_1_Color ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#ifndef ____FIIterator_1_WindowId_FWD_DEFINED__
#define ____FIIterator_1_WindowId_FWD_DEFINED__
typedef interface __FIIterator_1_WindowId __FIIterator_1_WindowId;
#ifdef __cplusplus
#define __FIIterator_1_WindowId ABI::Windows::Foundation::Collections::IIterator<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_WindowId_FWD_DEFINED__
#define ____FIVectorView_1_WindowId_FWD_DEFINED__
typedef interface __FIVectorView_1_WindowId __FIVectorView_1_WindowId;
#ifdef __cplusplus
#define __FIVectorView_1_WindowId ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::UI::WindowId >
#endif /* __cplusplus */
#endif

#ifndef ____FIReference_1_Color_FWD_DEFINED__
#define ____FIReference_1_Color_FWD_DEFINED__
typedef interface __FIReference_1_Color __FIReference_1_Color;
#ifdef __cplusplus
#define __FIReference_1_Color ABI::Windows::Foundation::IReference<ABI::Windows::UI::Color >
#endif /* __cplusplus */
#endif

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            struct Color {
                BYTE A;
                BYTE R;
                BYTE G;
                BYTE B;
            };
        }
    }
}
extern "C" {
#else
struct __x_ABI_CWindows_CUI_CColor {
    BYTE A;
    BYTE R;
    BYTE G;
    BYTE B;
};
#ifdef WIDL_using_Windows_UI
#define Color __x_ABI_CWindows_CUI_CColor
#endif /* WIDL_using_Windows_UI */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xc0000
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            struct WindowId {
                UINT64 Value;
            };
        }
    }
}
extern "C" {
#else
struct __x_ABI_CWindows_CUI_CWindowId {
    UINT64 Value;
};
#ifdef WIDL_using_Windows_UI
#define WindowId __x_ABI_CWindows_CUI_CWindowId
#endif /* WIDL_using_Windows_UI */
#endif

#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0xc0000 */
/*****************************************************************************
 * IColorHelper interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelper, 0x193cfbe7, 0x65c7, 0x4540, 0xad,0x08, 0x62,0x83,0xba,0x76,0x87,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("193cfbe7-65c7-4540-ad08-6283ba76879a")
            IColorHelper : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelper, 0x193cfbe7, 0x65c7, 0x4540, 0xad,0x08, 0x62,0x83,0xba,0x76,0x87,0x9a)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelper *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelper *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelper *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperVtbl;

interface __x_ABI_CWindows_CUI_CIColorHelper {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelper_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelper_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelper* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelper_AddRef(__x_ABI_CWindows_CUI_CIColorHelper* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelper_Release(__x_ABI_CWindows_CUI_CIColorHelper* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetIids(__x_ABI_CWindows_CUI_CIColorHelper* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelper* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelper* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelper IID___x_ABI_CWindows_CUI_CIColorHelper
#define IColorHelperVtbl __x_ABI_CWindows_CUI_CIColorHelperVtbl
#define IColorHelper __x_ABI_CWindows_CUI_CIColorHelper
#define IColorHelper_QueryInterface __x_ABI_CWindows_CUI_CIColorHelper_QueryInterface
#define IColorHelper_AddRef __x_ABI_CWindows_CUI_CIColorHelper_AddRef
#define IColorHelper_Release __x_ABI_CWindows_CUI_CIColorHelper_Release
#define IColorHelper_GetIids __x_ABI_CWindows_CUI_CIColorHelper_GetIids
#define IColorHelper_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelper_GetRuntimeClassName
#define IColorHelper_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelper_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelper_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorHelperStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelperStatics, 0x8504dbea, 0xfb6a, 0x4144, 0xa6,0xc2, 0x33,0x49,0x9c,0x92,0x84,0xf5);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("8504dbea-fb6a-4144-a6c2-33499c9284f5")
            IColorHelperStatics : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE FromArgb(
                    BYTE a,
                    BYTE r,
                    BYTE g,
                    BYTE b,
                    struct Color *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelperStatics, 0x8504dbea, 0xfb6a, 0x4144, 0xa6,0xc2, 0x33,0x49,0x9c,0x92,0x84,0xf5)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        TrustLevel *trustLevel);

    /*** IColorHelperStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *FromArgb)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics *This,
        BYTE a,
        BYTE r,
        BYTE g,
        BYTE b,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl;

interface __x_ABI_CWindows_CUI_CIColorHelperStatics {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorHelperStatics methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb(This,a,r,g,b,value) (This)->lpVtbl->FromArgb(This,a,r,g,b,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef(__x_ABI_CWindows_CUI_CIColorHelperStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics_Release(__x_ABI_CWindows_CUI_CIColorHelperStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorHelperStatics methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb(__x_ABI_CWindows_CUI_CIColorHelperStatics* This,BYTE a,BYTE r,BYTE g,BYTE b,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->FromArgb(This,a,r,g,b,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelperStatics IID___x_ABI_CWindows_CUI_CIColorHelperStatics
#define IColorHelperStaticsVtbl __x_ABI_CWindows_CUI_CIColorHelperStaticsVtbl
#define IColorHelperStatics __x_ABI_CWindows_CUI_CIColorHelperStatics
#define IColorHelperStatics_QueryInterface __x_ABI_CWindows_CUI_CIColorHelperStatics_QueryInterface
#define IColorHelperStatics_AddRef __x_ABI_CWindows_CUI_CIColorHelperStatics_AddRef
#define IColorHelperStatics_Release __x_ABI_CWindows_CUI_CIColorHelperStatics_Release
#define IColorHelperStatics_GetIids __x_ABI_CWindows_CUI_CIColorHelperStatics_GetIids
#define IColorHelperStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelperStatics_GetRuntimeClassName
#define IColorHelperStatics_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelperStatics_GetTrustLevel
#define IColorHelperStatics_FromArgb __x_ABI_CWindows_CUI_CIColorHelperStatics_FromArgb
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelperStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorHelperStatics2 interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000
#ifndef ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorHelperStatics2, 0x24d9af02, 0x6eb0, 0x4b94, 0x85,0x5c, 0xfc,0xf0,0x81,0x8d,0x9a,0x16);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("24d9af02-6eb0-4b94-855c-fcf0818d9a16")
            IColorHelperStatics2 : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE ToDisplayName(
                    struct Color color,
                    HSTRING *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorHelperStatics2, 0x24d9af02, 0x6eb0, 0x4b94, 0x85,0x5c, 0xfc,0xf0,0x81,0x8d,0x9a,0x16)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        TrustLevel *trustLevel);

    /*** IColorHelperStatics2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ToDisplayName)(
        __x_ABI_CWindows_CUI_CIColorHelperStatics2 *This,
        struct __x_ABI_CWindows_CUI_CColor color,
        HSTRING *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl;

interface __x_ABI_CWindows_CUI_CIColorHelperStatics2 {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorHelperStatics2 methods ***/
#define __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName(This,color,value) (This)->lpVtbl->ToDisplayName(This,color,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorHelperStatics2 methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName(__x_ABI_CWindows_CUI_CIColorHelperStatics2* This,struct __x_ABI_CWindows_CUI_CColor color,HSTRING *value) {
    return This->lpVtbl->ToDisplayName(This,color,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorHelperStatics2 IID___x_ABI_CWindows_CUI_CIColorHelperStatics2
#define IColorHelperStatics2Vtbl __x_ABI_CWindows_CUI_CIColorHelperStatics2Vtbl
#define IColorHelperStatics2 __x_ABI_CWindows_CUI_CIColorHelperStatics2
#define IColorHelperStatics2_QueryInterface __x_ABI_CWindows_CUI_CIColorHelperStatics2_QueryInterface
#define IColorHelperStatics2_AddRef __x_ABI_CWindows_CUI_CIColorHelperStatics2_AddRef
#define IColorHelperStatics2_Release __x_ABI_CWindows_CUI_CIColorHelperStatics2_Release
#define IColorHelperStatics2_GetIids __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetIids
#define IColorHelperStatics2_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetRuntimeClassName
#define IColorHelperStatics2_GetTrustLevel __x_ABI_CWindows_CUI_CIColorHelperStatics2_GetTrustLevel
#define IColorHelperStatics2_ToDisplayName __x_ABI_CWindows_CUI_CIColorHelperStatics2_ToDisplayName
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorHelperStatics2_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x40000 */

/*****************************************************************************
 * IColors interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColors, 0x9b8c9326, 0x4ca6, 0x4ce5, 0x89,0x94, 0x9e,0xff,0x65,0xca,0xbd,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("9b8c9326-4ca6-4ce5-8994-9eff65cabdcc")
            IColors : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColors, 0x9b8c9326, 0x4ca6, 0x4ce5, 0x89,0x94, 0x9e,0xff,0x65,0xca,0xbd,0xcc)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColors *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColors *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColors *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColors *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColors *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColors *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorsVtbl;

interface __x_ABI_CWindows_CUI_CIColors {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColors_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColors_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColors_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColors_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColors_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_QueryInterface(__x_ABI_CWindows_CUI_CIColors* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColors_AddRef(__x_ABI_CWindows_CUI_CIColors* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColors_Release(__x_ABI_CWindows_CUI_CIColors* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetIids(__x_ABI_CWindows_CUI_CIColors* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColors* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColors_GetTrustLevel(__x_ABI_CWindows_CUI_CIColors* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColors IID___x_ABI_CWindows_CUI_CIColors
#define IColorsVtbl __x_ABI_CWindows_CUI_CIColorsVtbl
#define IColors __x_ABI_CWindows_CUI_CIColors
#define IColors_QueryInterface __x_ABI_CWindows_CUI_CIColors_QueryInterface
#define IColors_AddRef __x_ABI_CWindows_CUI_CIColors_AddRef
#define IColors_Release __x_ABI_CWindows_CUI_CIColors_Release
#define IColors_GetIids __x_ABI_CWindows_CUI_CIColors_GetIids
#define IColors_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColors_GetRuntimeClassName
#define IColors_GetTrustLevel __x_ABI_CWindows_CUI_CIColors_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColors_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IColorsStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIColorsStatics, 0xcff52e04, 0xcca6, 0x4614, 0xa1,0x7e, 0x75,0x49,0x10,0xc8,0x4a,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("cff52e04-cca6-4614-a17e-754910c84a99")
            IColorsStatics : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE get_AliceBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_AntiqueWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Aqua(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Aquamarine(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Azure(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Beige(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Bisque(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Black(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BlanchedAlmond(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Blue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BlueViolet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Brown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_BurlyWood(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_CadetBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Chartreuse(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Chocolate(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Coral(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_CornflowerBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Cornsilk(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Crimson(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Cyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkCyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGoldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkKhaki(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkMagenta(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOliveGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOrange(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkOrchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSalmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkSlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DarkViolet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DeepPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DeepSkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DimGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_DodgerBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Firebrick(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_FloralWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_ForestGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Fuchsia(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gainsboro(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_GhostWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gold(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Goldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Gray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Green(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_GreenYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Honeydew(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_HotPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_IndianRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Indigo(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Ivory(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Khaki(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Lavender(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LavenderBlush(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LawnGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LemonChiffon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightCoral(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightCyan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGoldenrodYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightPink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSalmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightSteelBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LightYellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Lime(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_LimeGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Linen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Magenta(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Maroon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumAquamarine(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumOrchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumPurple(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumSpringGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MediumVioletRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MidnightBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MintCream(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_MistyRose(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Moccasin(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_NavajoWhite(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Navy(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OldLace(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Olive(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OliveDrab(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Orange(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_OrangeRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Orchid(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleGoldenrod(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleTurquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PaleVioletRed(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PapayaWhip(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PeachPuff(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Peru(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Pink(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Plum(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PowderBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Purple(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Red(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_RosyBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_RoyalBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SaddleBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Salmon(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SandyBrown(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SeaGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SeaShell(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Sienna(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Silver(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SkyBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SlateBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SlateGray(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Snow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SpringGreen(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_SteelBlue(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Tan(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Teal(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Thistle(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Tomato(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Transparent(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Turquoise(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Violet(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Wheat(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_White(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_WhiteSmoke(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_Yellow(
                    struct Color *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_YellowGreen(
                    struct Color *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIColorsStatics, 0xcff52e04, 0xcca6, 0x4614, 0xa1,0x7e, 0x75,0x49,0x10,0xc8,0x4a,0x99)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIColorsStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        TrustLevel *trustLevel);

    /*** IColorsStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AliceBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_AntiqueWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Aqua)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Aquamarine)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Azure)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Beige)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Bisque)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Black)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BlanchedAlmond)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Blue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BlueViolet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Brown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_BurlyWood)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_CadetBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Chartreuse)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Chocolate)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Coral)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_CornflowerBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Cornsilk)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Crimson)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Cyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkCyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGoldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkKhaki)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkMagenta)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOliveGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOrange)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkOrchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSalmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkSlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DarkViolet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DeepPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DeepSkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DimGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_DodgerBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Firebrick)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_FloralWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_ForestGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Fuchsia)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gainsboro)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_GhostWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gold)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Goldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Gray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Green)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_GreenYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Honeydew)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_HotPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_IndianRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Indigo)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Ivory)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Khaki)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Lavender)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LavenderBlush)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LawnGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LemonChiffon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightCoral)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightCyan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGoldenrodYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightPink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSalmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightSteelBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LightYellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Lime)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_LimeGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Linen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Magenta)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Maroon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumAquamarine)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumOrchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumPurple)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumSpringGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MediumVioletRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MidnightBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MintCream)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_MistyRose)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Moccasin)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_NavajoWhite)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Navy)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OldLace)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Olive)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OliveDrab)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Orange)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_OrangeRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Orchid)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleGoldenrod)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleTurquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PaleVioletRed)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PapayaWhip)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PeachPuff)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Peru)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Pink)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Plum)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_PowderBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Purple)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Red)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_RosyBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_RoyalBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SaddleBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Salmon)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SandyBrown)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SeaGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SeaShell)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Sienna)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Silver)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SkyBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SlateBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SlateGray)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Snow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SpringGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_SteelBlue)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Tan)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Teal)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Thistle)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Tomato)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Transparent)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Turquoise)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Violet)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Wheat)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_White)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_WhiteSmoke)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_Yellow)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_YellowGreen)(
        __x_ABI_CWindows_CUI_CIColorsStatics *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIColorsStaticsVtbl;

interface __x_ABI_CWindows_CUI_CIColorsStatics {
    CONST_VTBL __x_ABI_CWindows_CUI_CIColorsStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIColorsStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIColorsStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IColorsStatics methods ***/
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue(This,value) (This)->lpVtbl->get_AliceBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite(This,value) (This)->lpVtbl->get_AntiqueWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua(This,value) (This)->lpVtbl->get_Aqua(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine(This,value) (This)->lpVtbl->get_Aquamarine(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure(This,value) (This)->lpVtbl->get_Azure(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige(This,value) (This)->lpVtbl->get_Beige(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque(This,value) (This)->lpVtbl->get_Bisque(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Black(This,value) (This)->lpVtbl->get_Black(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond(This,value) (This)->lpVtbl->get_BlanchedAlmond(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue(This,value) (This)->lpVtbl->get_Blue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet(This,value) (This)->lpVtbl->get_BlueViolet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown(This,value) (This)->lpVtbl->get_Brown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood(This,value) (This)->lpVtbl->get_BurlyWood(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue(This,value) (This)->lpVtbl->get_CadetBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse(This,value) (This)->lpVtbl->get_Chartreuse(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate(This,value) (This)->lpVtbl->get_Chocolate(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral(This,value) (This)->lpVtbl->get_Coral(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue(This,value) (This)->lpVtbl->get_CornflowerBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk(This,value) (This)->lpVtbl->get_Cornsilk(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson(This,value) (This)->lpVtbl->get_Crimson(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan(This,value) (This)->lpVtbl->get_Cyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue(This,value) (This)->lpVtbl->get_DarkBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan(This,value) (This)->lpVtbl->get_DarkCyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod(This,value) (This)->lpVtbl->get_DarkGoldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray(This,value) (This)->lpVtbl->get_DarkGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen(This,value) (This)->lpVtbl->get_DarkGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki(This,value) (This)->lpVtbl->get_DarkKhaki(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta(This,value) (This)->lpVtbl->get_DarkMagenta(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen(This,value) (This)->lpVtbl->get_DarkOliveGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange(This,value) (This)->lpVtbl->get_DarkOrange(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid(This,value) (This)->lpVtbl->get_DarkOrchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed(This,value) (This)->lpVtbl->get_DarkRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon(This,value) (This)->lpVtbl->get_DarkSalmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen(This,value) (This)->lpVtbl->get_DarkSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue(This,value) (This)->lpVtbl->get_DarkSlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray(This,value) (This)->lpVtbl->get_DarkSlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise(This,value) (This)->lpVtbl->get_DarkTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet(This,value) (This)->lpVtbl->get_DarkViolet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink(This,value) (This)->lpVtbl->get_DeepPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue(This,value) (This)->lpVtbl->get_DeepSkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray(This,value) (This)->lpVtbl->get_DimGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue(This,value) (This)->lpVtbl->get_DodgerBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick(This,value) (This)->lpVtbl->get_Firebrick(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite(This,value) (This)->lpVtbl->get_FloralWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen(This,value) (This)->lpVtbl->get_ForestGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia(This,value) (This)->lpVtbl->get_Fuchsia(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro(This,value) (This)->lpVtbl->get_Gainsboro(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite(This,value) (This)->lpVtbl->get_GhostWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold(This,value) (This)->lpVtbl->get_Gold(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod(This,value) (This)->lpVtbl->get_Goldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray(This,value) (This)->lpVtbl->get_Gray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Green(This,value) (This)->lpVtbl->get_Green(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow(This,value) (This)->lpVtbl->get_GreenYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew(This,value) (This)->lpVtbl->get_Honeydew(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink(This,value) (This)->lpVtbl->get_HotPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed(This,value) (This)->lpVtbl->get_IndianRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo(This,value) (This)->lpVtbl->get_Indigo(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory(This,value) (This)->lpVtbl->get_Ivory(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki(This,value) (This)->lpVtbl->get_Khaki(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender(This,value) (This)->lpVtbl->get_Lavender(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush(This,value) (This)->lpVtbl->get_LavenderBlush(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen(This,value) (This)->lpVtbl->get_LawnGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon(This,value) (This)->lpVtbl->get_LemonChiffon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue(This,value) (This)->lpVtbl->get_LightBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral(This,value) (This)->lpVtbl->get_LightCoral(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan(This,value) (This)->lpVtbl->get_LightCyan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow(This,value) (This)->lpVtbl->get_LightGoldenrodYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen(This,value) (This)->lpVtbl->get_LightGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray(This,value) (This)->lpVtbl->get_LightGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink(This,value) (This)->lpVtbl->get_LightPink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon(This,value) (This)->lpVtbl->get_LightSalmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen(This,value) (This)->lpVtbl->get_LightSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue(This,value) (This)->lpVtbl->get_LightSkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray(This,value) (This)->lpVtbl->get_LightSlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue(This,value) (This)->lpVtbl->get_LightSteelBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow(This,value) (This)->lpVtbl->get_LightYellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime(This,value) (This)->lpVtbl->get_Lime(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen(This,value) (This)->lpVtbl->get_LimeGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen(This,value) (This)->lpVtbl->get_Linen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta(This,value) (This)->lpVtbl->get_Magenta(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon(This,value) (This)->lpVtbl->get_Maroon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine(This,value) (This)->lpVtbl->get_MediumAquamarine(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue(This,value) (This)->lpVtbl->get_MediumBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid(This,value) (This)->lpVtbl->get_MediumOrchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple(This,value) (This)->lpVtbl->get_MediumPurple(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen(This,value) (This)->lpVtbl->get_MediumSeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue(This,value) (This)->lpVtbl->get_MediumSlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen(This,value) (This)->lpVtbl->get_MediumSpringGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise(This,value) (This)->lpVtbl->get_MediumTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed(This,value) (This)->lpVtbl->get_MediumVioletRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue(This,value) (This)->lpVtbl->get_MidnightBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream(This,value) (This)->lpVtbl->get_MintCream(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose(This,value) (This)->lpVtbl->get_MistyRose(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin(This,value) (This)->lpVtbl->get_Moccasin(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite(This,value) (This)->lpVtbl->get_NavajoWhite(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy(This,value) (This)->lpVtbl->get_Navy(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace(This,value) (This)->lpVtbl->get_OldLace(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive(This,value) (This)->lpVtbl->get_Olive(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab(This,value) (This)->lpVtbl->get_OliveDrab(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange(This,value) (This)->lpVtbl->get_Orange(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed(This,value) (This)->lpVtbl->get_OrangeRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid(This,value) (This)->lpVtbl->get_Orchid(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod(This,value) (This)->lpVtbl->get_PaleGoldenrod(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen(This,value) (This)->lpVtbl->get_PaleGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise(This,value) (This)->lpVtbl->get_PaleTurquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed(This,value) (This)->lpVtbl->get_PaleVioletRed(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip(This,value) (This)->lpVtbl->get_PapayaWhip(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff(This,value) (This)->lpVtbl->get_PeachPuff(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru(This,value) (This)->lpVtbl->get_Peru(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink(This,value) (This)->lpVtbl->get_Pink(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum(This,value) (This)->lpVtbl->get_Plum(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue(This,value) (This)->lpVtbl->get_PowderBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple(This,value) (This)->lpVtbl->get_Purple(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Red(This,value) (This)->lpVtbl->get_Red(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown(This,value) (This)->lpVtbl->get_RosyBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue(This,value) (This)->lpVtbl->get_RoyalBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown(This,value) (This)->lpVtbl->get_SaddleBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon(This,value) (This)->lpVtbl->get_Salmon(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown(This,value) (This)->lpVtbl->get_SandyBrown(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen(This,value) (This)->lpVtbl->get_SeaGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell(This,value) (This)->lpVtbl->get_SeaShell(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna(This,value) (This)->lpVtbl->get_Sienna(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver(This,value) (This)->lpVtbl->get_Silver(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue(This,value) (This)->lpVtbl->get_SkyBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue(This,value) (This)->lpVtbl->get_SlateBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray(This,value) (This)->lpVtbl->get_SlateGray(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow(This,value) (This)->lpVtbl->get_Snow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen(This,value) (This)->lpVtbl->get_SpringGreen(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue(This,value) (This)->lpVtbl->get_SteelBlue(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan(This,value) (This)->lpVtbl->get_Tan(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal(This,value) (This)->lpVtbl->get_Teal(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle(This,value) (This)->lpVtbl->get_Thistle(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato(This,value) (This)->lpVtbl->get_Tomato(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent(This,value) (This)->lpVtbl->get_Transparent(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise(This,value) (This)->lpVtbl->get_Turquoise(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet(This,value) (This)->lpVtbl->get_Violet(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat(This,value) (This)->lpVtbl->get_Wheat(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_White(This,value) (This)->lpVtbl->get_White(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke(This,value) (This)->lpVtbl->get_WhiteSmoke(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow(This,value) (This)->lpVtbl->get_Yellow(This,value)
#define __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen(This,value) (This)->lpVtbl->get_YellowGreen(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface(__x_ABI_CWindows_CUI_CIColorsStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorsStatics_AddRef(__x_ABI_CWindows_CUI_CIColorsStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIColorsStatics_Release(__x_ABI_CWindows_CUI_CIColorsStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetIids(__x_ABI_CWindows_CUI_CIColorsStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIColorsStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel(__x_ABI_CWindows_CUI_CIColorsStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IColorsStatics methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_AliceBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_AntiqueWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Aqua(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Aquamarine(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Azure(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Beige(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Bisque(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Black(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Black(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BlanchedAlmond(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Blue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BlueViolet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Brown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_BurlyWood(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_CadetBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Chartreuse(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Chocolate(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Coral(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_CornflowerBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Cornsilk(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Crimson(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Cyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkCyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGoldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkKhaki(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkMagenta(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOliveGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOrange(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkOrchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSalmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkSlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DarkViolet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DeepPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DeepSkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DimGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_DodgerBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Firebrick(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_FloralWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_ForestGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Fuchsia(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gainsboro(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_GhostWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gold(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Goldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Gray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Green(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Green(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_GreenYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Honeydew(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_HotPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_IndianRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Indigo(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Ivory(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Khaki(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Lavender(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LavenderBlush(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LawnGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LemonChiffon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightCoral(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightCyan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGoldenrodYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightPink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSalmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightSteelBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LightYellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Lime(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_LimeGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Linen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Magenta(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Maroon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumAquamarine(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumOrchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumPurple(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumSpringGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MediumVioletRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MidnightBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MintCream(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_MistyRose(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Moccasin(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_NavajoWhite(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Navy(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OldLace(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Olive(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OliveDrab(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Orange(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_OrangeRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Orchid(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleGoldenrod(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleTurquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PaleVioletRed(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PapayaWhip(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PeachPuff(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Peru(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Pink(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Plum(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_PowderBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Purple(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Red(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Red(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_RosyBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_RoyalBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SaddleBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Salmon(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SandyBrown(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SeaGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SeaShell(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Sienna(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Silver(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SkyBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SlateBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SlateGray(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Snow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SpringGreen(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_SteelBlue(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Tan(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Teal(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Thistle(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Tomato(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Transparent(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Turquoise(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Violet(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Wheat(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_White(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_White(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_WhiteSmoke(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Yellow(This,value);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen(__x_ABI_CWindows_CUI_CIColorsStatics* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_YellowGreen(This,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IColorsStatics IID___x_ABI_CWindows_CUI_CIColorsStatics
#define IColorsStaticsVtbl __x_ABI_CWindows_CUI_CIColorsStaticsVtbl
#define IColorsStatics __x_ABI_CWindows_CUI_CIColorsStatics
#define IColorsStatics_QueryInterface __x_ABI_CWindows_CUI_CIColorsStatics_QueryInterface
#define IColorsStatics_AddRef __x_ABI_CWindows_CUI_CIColorsStatics_AddRef
#define IColorsStatics_Release __x_ABI_CWindows_CUI_CIColorsStatics_Release
#define IColorsStatics_GetIids __x_ABI_CWindows_CUI_CIColorsStatics_GetIids
#define IColorsStatics_GetRuntimeClassName __x_ABI_CWindows_CUI_CIColorsStatics_GetRuntimeClassName
#define IColorsStatics_GetTrustLevel __x_ABI_CWindows_CUI_CIColorsStatics_GetTrustLevel
#define IColorsStatics_get_AliceBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_AliceBlue
#define IColorsStatics_get_AntiqueWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_AntiqueWhite
#define IColorsStatics_get_Aqua __x_ABI_CWindows_CUI_CIColorsStatics_get_Aqua
#define IColorsStatics_get_Aquamarine __x_ABI_CWindows_CUI_CIColorsStatics_get_Aquamarine
#define IColorsStatics_get_Azure __x_ABI_CWindows_CUI_CIColorsStatics_get_Azure
#define IColorsStatics_get_Beige __x_ABI_CWindows_CUI_CIColorsStatics_get_Beige
#define IColorsStatics_get_Bisque __x_ABI_CWindows_CUI_CIColorsStatics_get_Bisque
#define IColorsStatics_get_Black __x_ABI_CWindows_CUI_CIColorsStatics_get_Black
#define IColorsStatics_get_BlanchedAlmond __x_ABI_CWindows_CUI_CIColorsStatics_get_BlanchedAlmond
#define IColorsStatics_get_Blue __x_ABI_CWindows_CUI_CIColorsStatics_get_Blue
#define IColorsStatics_get_BlueViolet __x_ABI_CWindows_CUI_CIColorsStatics_get_BlueViolet
#define IColorsStatics_get_Brown __x_ABI_CWindows_CUI_CIColorsStatics_get_Brown
#define IColorsStatics_get_BurlyWood __x_ABI_CWindows_CUI_CIColorsStatics_get_BurlyWood
#define IColorsStatics_get_CadetBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_CadetBlue
#define IColorsStatics_get_Chartreuse __x_ABI_CWindows_CUI_CIColorsStatics_get_Chartreuse
#define IColorsStatics_get_Chocolate __x_ABI_CWindows_CUI_CIColorsStatics_get_Chocolate
#define IColorsStatics_get_Coral __x_ABI_CWindows_CUI_CIColorsStatics_get_Coral
#define IColorsStatics_get_CornflowerBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_CornflowerBlue
#define IColorsStatics_get_Cornsilk __x_ABI_CWindows_CUI_CIColorsStatics_get_Cornsilk
#define IColorsStatics_get_Crimson __x_ABI_CWindows_CUI_CIColorsStatics_get_Crimson
#define IColorsStatics_get_Cyan __x_ABI_CWindows_CUI_CIColorsStatics_get_Cyan
#define IColorsStatics_get_DarkBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkBlue
#define IColorsStatics_get_DarkCyan __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkCyan
#define IColorsStatics_get_DarkGoldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGoldenrod
#define IColorsStatics_get_DarkGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGray
#define IColorsStatics_get_DarkGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkGreen
#define IColorsStatics_get_DarkKhaki __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkKhaki
#define IColorsStatics_get_DarkMagenta __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkMagenta
#define IColorsStatics_get_DarkOliveGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOliveGreen
#define IColorsStatics_get_DarkOrange __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrange
#define IColorsStatics_get_DarkOrchid __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkOrchid
#define IColorsStatics_get_DarkRed __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkRed
#define IColorsStatics_get_DarkSalmon __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSalmon
#define IColorsStatics_get_DarkSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSeaGreen
#define IColorsStatics_get_DarkSlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateBlue
#define IColorsStatics_get_DarkSlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkSlateGray
#define IColorsStatics_get_DarkTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkTurquoise
#define IColorsStatics_get_DarkViolet __x_ABI_CWindows_CUI_CIColorsStatics_get_DarkViolet
#define IColorsStatics_get_DeepPink __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepPink
#define IColorsStatics_get_DeepSkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DeepSkyBlue
#define IColorsStatics_get_DimGray __x_ABI_CWindows_CUI_CIColorsStatics_get_DimGray
#define IColorsStatics_get_DodgerBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_DodgerBlue
#define IColorsStatics_get_Firebrick __x_ABI_CWindows_CUI_CIColorsStatics_get_Firebrick
#define IColorsStatics_get_FloralWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_FloralWhite
#define IColorsStatics_get_ForestGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_ForestGreen
#define IColorsStatics_get_Fuchsia __x_ABI_CWindows_CUI_CIColorsStatics_get_Fuchsia
#define IColorsStatics_get_Gainsboro __x_ABI_CWindows_CUI_CIColorsStatics_get_Gainsboro
#define IColorsStatics_get_GhostWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_GhostWhite
#define IColorsStatics_get_Gold __x_ABI_CWindows_CUI_CIColorsStatics_get_Gold
#define IColorsStatics_get_Goldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_Goldenrod
#define IColorsStatics_get_Gray __x_ABI_CWindows_CUI_CIColorsStatics_get_Gray
#define IColorsStatics_get_Green __x_ABI_CWindows_CUI_CIColorsStatics_get_Green
#define IColorsStatics_get_GreenYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_GreenYellow
#define IColorsStatics_get_Honeydew __x_ABI_CWindows_CUI_CIColorsStatics_get_Honeydew
#define IColorsStatics_get_HotPink __x_ABI_CWindows_CUI_CIColorsStatics_get_HotPink
#define IColorsStatics_get_IndianRed __x_ABI_CWindows_CUI_CIColorsStatics_get_IndianRed
#define IColorsStatics_get_Indigo __x_ABI_CWindows_CUI_CIColorsStatics_get_Indigo
#define IColorsStatics_get_Ivory __x_ABI_CWindows_CUI_CIColorsStatics_get_Ivory
#define IColorsStatics_get_Khaki __x_ABI_CWindows_CUI_CIColorsStatics_get_Khaki
#define IColorsStatics_get_Lavender __x_ABI_CWindows_CUI_CIColorsStatics_get_Lavender
#define IColorsStatics_get_LavenderBlush __x_ABI_CWindows_CUI_CIColorsStatics_get_LavenderBlush
#define IColorsStatics_get_LawnGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LawnGreen
#define IColorsStatics_get_LemonChiffon __x_ABI_CWindows_CUI_CIColorsStatics_get_LemonChiffon
#define IColorsStatics_get_LightBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightBlue
#define IColorsStatics_get_LightCoral __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCoral
#define IColorsStatics_get_LightCyan __x_ABI_CWindows_CUI_CIColorsStatics_get_LightCyan
#define IColorsStatics_get_LightGoldenrodYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGoldenrodYellow
#define IColorsStatics_get_LightGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGreen
#define IColorsStatics_get_LightGray __x_ABI_CWindows_CUI_CIColorsStatics_get_LightGray
#define IColorsStatics_get_LightPink __x_ABI_CWindows_CUI_CIColorsStatics_get_LightPink
#define IColorsStatics_get_LightSalmon __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSalmon
#define IColorsStatics_get_LightSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSeaGreen
#define IColorsStatics_get_LightSkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSkyBlue
#define IColorsStatics_get_LightSlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSlateGray
#define IColorsStatics_get_LightSteelBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_LightSteelBlue
#define IColorsStatics_get_LightYellow __x_ABI_CWindows_CUI_CIColorsStatics_get_LightYellow
#define IColorsStatics_get_Lime __x_ABI_CWindows_CUI_CIColorsStatics_get_Lime
#define IColorsStatics_get_LimeGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_LimeGreen
#define IColorsStatics_get_Linen __x_ABI_CWindows_CUI_CIColorsStatics_get_Linen
#define IColorsStatics_get_Magenta __x_ABI_CWindows_CUI_CIColorsStatics_get_Magenta
#define IColorsStatics_get_Maroon __x_ABI_CWindows_CUI_CIColorsStatics_get_Maroon
#define IColorsStatics_get_MediumAquamarine __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumAquamarine
#define IColorsStatics_get_MediumBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumBlue
#define IColorsStatics_get_MediumOrchid __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumOrchid
#define IColorsStatics_get_MediumPurple __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumPurple
#define IColorsStatics_get_MediumSeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSeaGreen
#define IColorsStatics_get_MediumSlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSlateBlue
#define IColorsStatics_get_MediumSpringGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumSpringGreen
#define IColorsStatics_get_MediumTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumTurquoise
#define IColorsStatics_get_MediumVioletRed __x_ABI_CWindows_CUI_CIColorsStatics_get_MediumVioletRed
#define IColorsStatics_get_MidnightBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_MidnightBlue
#define IColorsStatics_get_MintCream __x_ABI_CWindows_CUI_CIColorsStatics_get_MintCream
#define IColorsStatics_get_MistyRose __x_ABI_CWindows_CUI_CIColorsStatics_get_MistyRose
#define IColorsStatics_get_Moccasin __x_ABI_CWindows_CUI_CIColorsStatics_get_Moccasin
#define IColorsStatics_get_NavajoWhite __x_ABI_CWindows_CUI_CIColorsStatics_get_NavajoWhite
#define IColorsStatics_get_Navy __x_ABI_CWindows_CUI_CIColorsStatics_get_Navy
#define IColorsStatics_get_OldLace __x_ABI_CWindows_CUI_CIColorsStatics_get_OldLace
#define IColorsStatics_get_Olive __x_ABI_CWindows_CUI_CIColorsStatics_get_Olive
#define IColorsStatics_get_OliveDrab __x_ABI_CWindows_CUI_CIColorsStatics_get_OliveDrab
#define IColorsStatics_get_Orange __x_ABI_CWindows_CUI_CIColorsStatics_get_Orange
#define IColorsStatics_get_OrangeRed __x_ABI_CWindows_CUI_CIColorsStatics_get_OrangeRed
#define IColorsStatics_get_Orchid __x_ABI_CWindows_CUI_CIColorsStatics_get_Orchid
#define IColorsStatics_get_PaleGoldenrod __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGoldenrod
#define IColorsStatics_get_PaleGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleGreen
#define IColorsStatics_get_PaleTurquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleTurquoise
#define IColorsStatics_get_PaleVioletRed __x_ABI_CWindows_CUI_CIColorsStatics_get_PaleVioletRed
#define IColorsStatics_get_PapayaWhip __x_ABI_CWindows_CUI_CIColorsStatics_get_PapayaWhip
#define IColorsStatics_get_PeachPuff __x_ABI_CWindows_CUI_CIColorsStatics_get_PeachPuff
#define IColorsStatics_get_Peru __x_ABI_CWindows_CUI_CIColorsStatics_get_Peru
#define IColorsStatics_get_Pink __x_ABI_CWindows_CUI_CIColorsStatics_get_Pink
#define IColorsStatics_get_Plum __x_ABI_CWindows_CUI_CIColorsStatics_get_Plum
#define IColorsStatics_get_PowderBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_PowderBlue
#define IColorsStatics_get_Purple __x_ABI_CWindows_CUI_CIColorsStatics_get_Purple
#define IColorsStatics_get_Red __x_ABI_CWindows_CUI_CIColorsStatics_get_Red
#define IColorsStatics_get_RosyBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_RosyBrown
#define IColorsStatics_get_RoyalBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_RoyalBlue
#define IColorsStatics_get_SaddleBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_SaddleBrown
#define IColorsStatics_get_Salmon __x_ABI_CWindows_CUI_CIColorsStatics_get_Salmon
#define IColorsStatics_get_SandyBrown __x_ABI_CWindows_CUI_CIColorsStatics_get_SandyBrown
#define IColorsStatics_get_SeaGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaGreen
#define IColorsStatics_get_SeaShell __x_ABI_CWindows_CUI_CIColorsStatics_get_SeaShell
#define IColorsStatics_get_Sienna __x_ABI_CWindows_CUI_CIColorsStatics_get_Sienna
#define IColorsStatics_get_Silver __x_ABI_CWindows_CUI_CIColorsStatics_get_Silver
#define IColorsStatics_get_SkyBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SkyBlue
#define IColorsStatics_get_SlateBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateBlue
#define IColorsStatics_get_SlateGray __x_ABI_CWindows_CUI_CIColorsStatics_get_SlateGray
#define IColorsStatics_get_Snow __x_ABI_CWindows_CUI_CIColorsStatics_get_Snow
#define IColorsStatics_get_SpringGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_SpringGreen
#define IColorsStatics_get_SteelBlue __x_ABI_CWindows_CUI_CIColorsStatics_get_SteelBlue
#define IColorsStatics_get_Tan __x_ABI_CWindows_CUI_CIColorsStatics_get_Tan
#define IColorsStatics_get_Teal __x_ABI_CWindows_CUI_CIColorsStatics_get_Teal
#define IColorsStatics_get_Thistle __x_ABI_CWindows_CUI_CIColorsStatics_get_Thistle
#define IColorsStatics_get_Tomato __x_ABI_CWindows_CUI_CIColorsStatics_get_Tomato
#define IColorsStatics_get_Transparent __x_ABI_CWindows_CUI_CIColorsStatics_get_Transparent
#define IColorsStatics_get_Turquoise __x_ABI_CWindows_CUI_CIColorsStatics_get_Turquoise
#define IColorsStatics_get_Violet __x_ABI_CWindows_CUI_CIColorsStatics_get_Violet
#define IColorsStatics_get_Wheat __x_ABI_CWindows_CUI_CIColorsStatics_get_Wheat
#define IColorsStatics_get_White __x_ABI_CWindows_CUI_CIColorsStatics_get_White
#define IColorsStatics_get_WhiteSmoke __x_ABI_CWindows_CUI_CIColorsStatics_get_WhiteSmoke
#define IColorsStatics_get_Yellow __x_ABI_CWindows_CUI_CIColorsStatics_get_Yellow
#define IColorsStatics_get_YellowGreen __x_ABI_CWindows_CUI_CIColorsStatics_get_YellowGreen
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIColorsStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUIContentRoot interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIUIContentRoot, 0x1dfcbac6, 0xb36b, 0x5cb9, 0x9b,0xc5, 0x2b,0x7a,0x0e,0xdd,0xc3,0x78);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("1dfcbac6-b36b-5cb9-9bc5-2b7a0eddc378")
            IUIContentRoot : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE get_UIContext(
                    ABI::Windows::UI::IUIContext **value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIUIContentRoot, 0x1dfcbac6, 0xb36b, 0x5cb9, 0x9b,0xc5, 0x2b,0x7a,0x0e,0xdd,0xc3,0x78)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIUIContentRootVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        TrustLevel *trustLevel);

    /*** IUIContentRoot methods ***/
    HRESULT (STDMETHODCALLTYPE *get_UIContext)(
        __x_ABI_CWindows_CUI_CIUIContentRoot *This,
        __x_ABI_CWindows_CUI_CIUIContext **value);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIUIContentRootVtbl;

interface __x_ABI_CWindows_CUI_CIUIContentRoot {
    CONST_VTBL __x_ABI_CWindows_CUI_CIUIContentRootVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUIContentRoot methods ***/
#define __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext(This,value) (This)->lpVtbl->get_UIContext(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface(__x_ABI_CWindows_CUI_CIUIContentRoot* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef(__x_ABI_CWindows_CUI_CIUIContentRoot* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContentRoot_Release(__x_ABI_CWindows_CUI_CIUIContentRoot* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids(__x_ABI_CWindows_CUI_CIUIContentRoot* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIUIContentRoot* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel(__x_ABI_CWindows_CUI_CIUIContentRoot* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUIContentRoot methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext(__x_ABI_CWindows_CUI_CIUIContentRoot* This,__x_ABI_CWindows_CUI_CIUIContext **value) {
    return This->lpVtbl->get_UIContext(This,value);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IUIContentRoot IID___x_ABI_CWindows_CUI_CIUIContentRoot
#define IUIContentRootVtbl __x_ABI_CWindows_CUI_CIUIContentRootVtbl
#define IUIContentRoot __x_ABI_CWindows_CUI_CIUIContentRoot
#define IUIContentRoot_QueryInterface __x_ABI_CWindows_CUI_CIUIContentRoot_QueryInterface
#define IUIContentRoot_AddRef __x_ABI_CWindows_CUI_CIUIContentRoot_AddRef
#define IUIContentRoot_Release __x_ABI_CWindows_CUI_CIUIContentRoot_Release
#define IUIContentRoot_GetIids __x_ABI_CWindows_CUI_CIUIContentRoot_GetIids
#define IUIContentRoot_GetRuntimeClassName __x_ABI_CWindows_CUI_CIUIContentRoot_GetRuntimeClassName
#define IUIContentRoot_GetTrustLevel __x_ABI_CWindows_CUI_CIUIContentRoot_GetTrustLevel
#define IUIContentRoot_get_UIContext __x_ABI_CWindows_CUI_CIUIContentRoot_get_UIContext
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIUIContentRoot_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*****************************************************************************
 * IUIContext interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CUI_CIUIContext, 0xbb5cfacd, 0x5bd8, 0x59d0, 0xa5,0x9e, 0x1c,0x17,0xa4,0xd6,0xd2,0x43);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace UI {
            MIDL_INTERFACE("bb5cfacd-5bd8-59d0-a59e-1c17a4d6d243")
            IUIContext : public IInspectable
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CUI_CIUIContext, 0xbb5cfacd, 0x5bd8, 0x59d0, 0xa5,0x9e, 0x1c,0x17,0xa4,0xd6,0xd2,0x43)
#endif
#else
typedef struct __x_ABI_CWindows_CUI_CIUIContextVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CUI_CIUIContext *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CUI_CIUIContext *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CUI_CIUIContext *This,
        TrustLevel *trustLevel);

    END_INTERFACE
} __x_ABI_CWindows_CUI_CIUIContextVtbl;

interface __x_ABI_CWindows_CUI_CIUIContext {
    CONST_VTBL __x_ABI_CWindows_CUI_CIUIContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CUI_CIUIContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CUI_CIUIContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CUI_CIUIContext_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CUI_CIUIContext_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_QueryInterface(__x_ABI_CWindows_CUI_CIUIContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContext_AddRef(__x_ABI_CWindows_CUI_CIUIContext* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CUI_CIUIContext_Release(__x_ABI_CWindows_CUI_CIUIContext* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetIids(__x_ABI_CWindows_CUI_CIUIContext* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName(__x_ABI_CWindows_CUI_CIUIContext* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel(__x_ABI_CWindows_CUI_CIUIContext* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
#endif
#ifdef WIDL_using_Windows_UI
#define IID_IUIContext IID___x_ABI_CWindows_CUI_CIUIContext
#define IUIContextVtbl __x_ABI_CWindows_CUI_CIUIContextVtbl
#define IUIContext __x_ABI_CWindows_CUI_CIUIContext
#define IUIContext_QueryInterface __x_ABI_CWindows_CUI_CIUIContext_QueryInterface
#define IUIContext_AddRef __x_ABI_CWindows_CUI_CIUIContext_AddRef
#define IUIContext_Release __x_ABI_CWindows_CUI_CIUIContext_Release
#define IUIContext_GetIids __x_ABI_CWindows_CUI_CIUIContext_GetIids
#define IUIContext_GetRuntimeClassName __x_ABI_CWindows_CUI_CIUIContext_GetRuntimeClassName
#define IUIContext_GetTrustLevel __x_ABI_CWindows_CUI_CIUIContext_GetTrustLevel
#endif /* WIDL_using_Windows_UI */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CUI_CIUIContext_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*
 * Class Windows.UI.ColorHelper
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED
#define RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_ColorHelper[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','H','e','l','p','e','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ColorHelper[] = L"Windows.UI.ColorHelper";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_ColorHelper[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','H','e','l','p','e','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_ColorHelper_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.UI.Colors
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_UI_Colors_DEFINED
#define RUNTIMECLASS_Windows_UI_Colors_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_Colors[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Colors[] = L"Windows.UI.Colors";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_Colors[] = {'W','i','n','d','o','w','s','.','U','I','.','C','o','l','o','r','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_Colors_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.UI.UIContentRoot
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED
#define RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','n','t','R','o','o','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = L"Windows.UI.UIContentRoot";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContentRoot[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','n','t','R','o','o','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_UIContentRoot_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*
 * Class Windows.UI.UIContext
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000
#ifndef RUNTIMECLASS_Windows_UI_UIContext_DEFINED
#define RUNTIMECLASS_Windows_UI_UIContext_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_UI_UIContext[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','x','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContext[] = L"Windows.UI.UIContext";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_UI_UIContext[] = {'W','i','n','d','o','w','s','.','U','I','.','U','I','C','o','n','t','e','x','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_UI_UIContext_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x80000 */

/*****************************************************************************
 * IIterable<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIIterable_1_Color_INTERFACE_DEFINED__
#define ____FIIterable_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterable_1_Color, 0x932eef5e, 0x2c2f, 0x5eae, 0x92,0x9a, 0x74,0xe9,0x73,0xb5,0x7c,0x27);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("932eef5e-2c2f-5eae-929a-74e973b57c27")
                IIterable<ABI::Windows::UI::Color > : IIterable_impl<ABI::Windows::UI::Color >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterable_1_Color, 0x932eef5e, 0x2c2f, 0x5eae, 0x92,0x9a, 0x74,0xe9,0x73,0xb5,0x7c,0x27)
#endif
#else
typedef struct __FIIterable_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterable_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterable_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterable_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterable_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterable_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterable_1_Color *This,
        TrustLevel *trustLevel);

    /*** IIterable<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *First)(
        __FIIterable_1_Color *This,
        __FIIterator_1_Color **value);

    END_INTERFACE
} __FIIterable_1_ColorVtbl;

interface __FIIterable_1_Color {
    CONST_VTBL __FIIterable_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterable_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterable_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterable_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterable_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterable_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterable_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterable<ABI::Windows::UI::Color > methods ***/
#define __FIIterable_1_Color_First(This,value) (This)->lpVtbl->First(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_QueryInterface(__FIIterable_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterable_1_Color_AddRef(__FIIterable_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterable_1_Color_Release(__FIIterable_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetIids(__FIIterable_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetRuntimeClassName(__FIIterable_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterable_1_Color_GetTrustLevel(__FIIterable_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterable<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_Color_First(__FIIterable_1_Color* This,__FIIterator_1_Color **value) {
    return This->lpVtbl->First(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterable_Color IID___FIIterable_1_Color
#define IIterable_ColorVtbl __FIIterable_1_ColorVtbl
#define IIterable_Color __FIIterable_1_Color
#define IIterable_Color_QueryInterface __FIIterable_1_Color_QueryInterface
#define IIterable_Color_AddRef __FIIterable_1_Color_AddRef
#define IIterable_Color_Release __FIIterable_1_Color_Release
#define IIterable_Color_GetIids __FIIterable_1_Color_GetIids
#define IIterable_Color_GetRuntimeClassName __FIIterable_1_Color_GetRuntimeClassName
#define IIterable_Color_GetTrustLevel __FIIterable_1_Color_GetTrustLevel
#define IIterable_Color_First __FIIterable_1_Color_First
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterable_1_Color_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterable<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIIterable_1_WindowId_INTERFACE_DEFINED__
#define ____FIIterable_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterable_1_WindowId, 0x745698bf, 0x22ad, 0x5c0d, 0xb0,0xe0, 0x07,0xd3,0x5a,0x1c,0x97,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("745698bf-22ad-5c0d-b0e0-07d35a1c9719")
                IIterable<ABI::Windows::UI::WindowId > : IIterable_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterable_1_WindowId, 0x745698bf, 0x22ad, 0x5c0d, 0xb0,0xe0, 0x07,0xd3,0x5a,0x1c,0x97,0x19)
#endif
#else
typedef struct __FIIterable_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterable_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterable_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterable_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterable_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterable_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterable_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IIterable<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *First)(
        __FIIterable_1_WindowId *This,
        __FIIterator_1_WindowId **value);

    END_INTERFACE
} __FIIterable_1_WindowIdVtbl;

interface __FIIterable_1_WindowId {
    CONST_VTBL __FIIterable_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterable_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterable_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterable_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterable_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterable_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterable_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterable<ABI::Windows::UI::WindowId > methods ***/
#define __FIIterable_1_WindowId_First(This,value) (This)->lpVtbl->First(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_QueryInterface(__FIIterable_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterable_1_WindowId_AddRef(__FIIterable_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterable_1_WindowId_Release(__FIIterable_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetIids(__FIIterable_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetRuntimeClassName(__FIIterable_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_GetTrustLevel(__FIIterable_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterable<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIIterable_1_WindowId_First(__FIIterable_1_WindowId* This,__FIIterator_1_WindowId **value) {
    return This->lpVtbl->First(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterable_WindowId IID___FIIterable_1_WindowId
#define IIterable_WindowIdVtbl __FIIterable_1_WindowIdVtbl
#define IIterable_WindowId __FIIterable_1_WindowId
#define IIterable_WindowId_QueryInterface __FIIterable_1_WindowId_QueryInterface
#define IIterable_WindowId_AddRef __FIIterable_1_WindowId_AddRef
#define IIterable_WindowId_Release __FIIterable_1_WindowId_Release
#define IIterable_WindowId_GetIids __FIIterable_1_WindowId_GetIids
#define IIterable_WindowId_GetRuntimeClassName __FIIterable_1_WindowId_GetRuntimeClassName
#define IIterable_WindowId_GetTrustLevel __FIIterable_1_WindowId_GetTrustLevel
#define IIterable_WindowId_First __FIIterable_1_WindowId_First
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterable_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterator<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIIterator_1_Color_INTERFACE_DEFINED__
#define ____FIIterator_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterator_1_Color, 0xc4310b12, 0x7ac2, 0x5e5b, 0xb5,0x11, 0xe5,0x46,0xee,0xa4,0x73,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("c4310b12-7ac2-5e5b-b511-e546eea473b4")
                IIterator<ABI::Windows::UI::Color > : IIterator_impl<ABI::Windows::UI::Color >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterator_1_Color, 0xc4310b12, 0x7ac2, 0x5e5b, 0xb5,0x11, 0xe5,0x46,0xee,0xa4,0x73,0xb4)
#endif
#else
typedef struct __FIIterator_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterator_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterator_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterator_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterator_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterator_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterator_1_Color *This,
        TrustLevel *trustLevel);

    /*** IIterator<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Current)(
        __FIIterator_1_Color *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
        __FIIterator_1_Color *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        __FIIterator_1_Color *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIIterator_1_Color *This,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CColor *items,
        UINT32 *value);

    END_INTERFACE
} __FIIterator_1_ColorVtbl;

interface __FIIterator_1_Color {
    CONST_VTBL __FIIterator_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterator_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterator_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterator_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterator_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterator_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterator_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterator<ABI::Windows::UI::Color > methods ***/
#define __FIIterator_1_Color_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
#define __FIIterator_1_Color_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
#define __FIIterator_1_Color_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
#define __FIIterator_1_Color_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_QueryInterface(__FIIterator_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterator_1_Color_AddRef(__FIIterator_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterator_1_Color_Release(__FIIterator_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetIids(__FIIterator_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetRuntimeClassName(__FIIterator_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetTrustLevel(__FIIterator_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterator<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_Color_get_Current(__FIIterator_1_Color* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Current(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_get_HasCurrent(__FIIterator_1_Color* This,WINBOOL *value) {
    return This->lpVtbl->get_HasCurrent(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_MoveNext(__FIIterator_1_Color* This,WINBOOL *value) {
    return This->lpVtbl->MoveNext(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_Color_GetMany(__FIIterator_1_Color* This,UINT32 items_size,struct __x_ABI_CWindows_CUI_CColor *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterator_Color IID___FIIterator_1_Color
#define IIterator_ColorVtbl __FIIterator_1_ColorVtbl
#define IIterator_Color __FIIterator_1_Color
#define IIterator_Color_QueryInterface __FIIterator_1_Color_QueryInterface
#define IIterator_Color_AddRef __FIIterator_1_Color_AddRef
#define IIterator_Color_Release __FIIterator_1_Color_Release
#define IIterator_Color_GetIids __FIIterator_1_Color_GetIids
#define IIterator_Color_GetRuntimeClassName __FIIterator_1_Color_GetRuntimeClassName
#define IIterator_Color_GetTrustLevel __FIIterator_1_Color_GetTrustLevel
#define IIterator_Color_get_Current __FIIterator_1_Color_get_Current
#define IIterator_Color_get_HasCurrent __FIIterator_1_Color_get_HasCurrent
#define IIterator_Color_MoveNext __FIIterator_1_Color_MoveNext
#define IIterator_Color_GetMany __FIIterator_1_Color_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterator_1_Color_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIterator<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIIterator_1_WindowId_INTERFACE_DEFINED__
#define ____FIIterator_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIIterator_1_WindowId, 0xba0a30a1, 0xc082, 0x5671, 0xac,0x07, 0x7a,0xaa,0x4f,0x26,0x96,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("ba0a30a1-c082-5671-ac07-7aaa4f269670")
                IIterator<ABI::Windows::UI::WindowId > : IIterator_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIIterator_1_WindowId, 0xba0a30a1, 0xc082, 0x5671, 0xac,0x07, 0x7a,0xaa,0x4f,0x26,0x96,0x70)
#endif
#else
typedef struct __FIIterator_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIIterator_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIIterator_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIIterator_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIIterator_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIIterator_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIIterator_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IIterator<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Current)(
        __FIIterator_1_WindowId *This,
        struct __x_ABI_CWindows_CUI_CWindowId *value);

    HRESULT (STDMETHODCALLTYPE *get_HasCurrent)(
        __FIIterator_1_WindowId *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        __FIIterator_1_WindowId *This,
        WINBOOL *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIIterator_1_WindowId *This,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CWindowId *items,
        UINT32 *value);

    END_INTERFACE
} __FIIterator_1_WindowIdVtbl;

interface __FIIterator_1_WindowId {
    CONST_VTBL __FIIterator_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIIterator_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIIterator_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIIterator_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIIterator_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIIterator_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIIterator_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIterator<ABI::Windows::UI::WindowId > methods ***/
#define __FIIterator_1_WindowId_get_Current(This,value) (This)->lpVtbl->get_Current(This,value)
#define __FIIterator_1_WindowId_get_HasCurrent(This,value) (This)->lpVtbl->get_HasCurrent(This,value)
#define __FIIterator_1_WindowId_MoveNext(This,value) (This)->lpVtbl->MoveNext(This,value)
#define __FIIterator_1_WindowId_GetMany(This,items_size,items,value) (This)->lpVtbl->GetMany(This,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_QueryInterface(__FIIterator_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIIterator_1_WindowId_AddRef(__FIIterator_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIIterator_1_WindowId_Release(__FIIterator_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetIids(__FIIterator_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetRuntimeClassName(__FIIterator_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetTrustLevel(__FIIterator_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIterator<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_get_Current(__FIIterator_1_WindowId* This,struct __x_ABI_CWindows_CUI_CWindowId *value) {
    return This->lpVtbl->get_Current(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_get_HasCurrent(__FIIterator_1_WindowId* This,WINBOOL *value) {
    return This->lpVtbl->get_HasCurrent(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_MoveNext(__FIIterator_1_WindowId* This,WINBOOL *value) {
    return This->lpVtbl->MoveNext(This,value);
}
static __WIDL_INLINE HRESULT __FIIterator_1_WindowId_GetMany(__FIIterator_1_WindowId* This,UINT32 items_size,struct __x_ABI_CWindows_CUI_CWindowId *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IIterator_WindowId IID___FIIterator_1_WindowId
#define IIterator_WindowIdVtbl __FIIterator_1_WindowIdVtbl
#define IIterator_WindowId __FIIterator_1_WindowId
#define IIterator_WindowId_QueryInterface __FIIterator_1_WindowId_QueryInterface
#define IIterator_WindowId_AddRef __FIIterator_1_WindowId_AddRef
#define IIterator_WindowId_Release __FIIterator_1_WindowId_Release
#define IIterator_WindowId_GetIids __FIIterator_1_WindowId_GetIids
#define IIterator_WindowId_GetRuntimeClassName __FIIterator_1_WindowId_GetRuntimeClassName
#define IIterator_WindowId_GetTrustLevel __FIIterator_1_WindowId_GetTrustLevel
#define IIterator_WindowId_get_Current __FIIterator_1_WindowId_get_Current
#define IIterator_WindowId_get_HasCurrent __FIIterator_1_WindowId_get_HasCurrent
#define IIterator_WindowId_MoveNext __FIIterator_1_WindowId_MoveNext
#define IIterator_WindowId_GetMany __FIIterator_1_WindowId_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIIterator_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::UI::WindowId > interface
 */
#ifndef ____FIVectorView_1_WindowId_INTERFACE_DEFINED__
#define ____FIVectorView_1_WindowId_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_WindowId, 0xf49e7371, 0xb31a, 0x5620, 0xa4,0x2e, 0x7e,0x96,0x90,0x03,0xf0,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("f49e7371-b31a-5620-a42e-7e969003f0ff")
                IVectorView<ABI::Windows::UI::WindowId > : IVectorView_impl<ABI::Windows::UI::WindowId >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_WindowId, 0xf49e7371, 0xb31a, 0x5620, 0xa4,0x2e, 0x7e,0x96,0x90,0x03,0xf0,0xff)
#endif
#else
typedef struct __FIVectorView_1_WindowIdVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_WindowId *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_WindowId *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_WindowId *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_WindowId *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_WindowId *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_WindowId *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_WindowId *This,
        UINT32 index,
        struct __x_ABI_CWindows_CUI_CWindowId *value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_WindowId *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_WindowId *This,
        struct __x_ABI_CWindows_CUI_CWindowId element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_WindowId *This,
        UINT32 start_index,
        UINT32 items_size,
        struct __x_ABI_CWindows_CUI_CWindowId *items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_WindowIdVtbl;

interface __FIVectorView_1_WindowId {
    CONST_VTBL __FIVectorView_1_WindowIdVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_WindowId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_WindowId_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_WindowId_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_WindowId_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_WindowId_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_WindowId_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
#define __FIVectorView_1_WindowId_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_WindowId_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_WindowId_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_WindowId_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_QueryInterface(__FIVectorView_1_WindowId* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIVectorView_1_WindowId_AddRef(__FIVectorView_1_WindowId* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIVectorView_1_WindowId_Release(__FIVectorView_1_WindowId* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetIids(__FIVectorView_1_WindowId* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetRuntimeClassName(__FIVectorView_1_WindowId* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetTrustLevel(__FIVectorView_1_WindowId* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::UI::WindowId > methods ***/
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetAt(__FIVectorView_1_WindowId* This,UINT32 index,struct __x_ABI_CWindows_CUI_CWindowId *value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_get_Size(__FIVectorView_1_WindowId* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_IndexOf(__FIVectorView_1_WindowId* This,struct __x_ABI_CWindows_CUI_CWindowId element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static __WIDL_INLINE HRESULT __FIVectorView_1_WindowId_GetMany(__FIVectorView_1_WindowId* This,UINT32 start_index,UINT32 items_size,struct __x_ABI_CWindows_CUI_CWindowId *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_WindowId IID___FIVectorView_1_WindowId
#define IVectorView_WindowIdVtbl __FIVectorView_1_WindowIdVtbl
#define IVectorView_WindowId __FIVectorView_1_WindowId
#define IVectorView_WindowId_QueryInterface __FIVectorView_1_WindowId_QueryInterface
#define IVectorView_WindowId_AddRef __FIVectorView_1_WindowId_AddRef
#define IVectorView_WindowId_Release __FIVectorView_1_WindowId_Release
#define IVectorView_WindowId_GetIids __FIVectorView_1_WindowId_GetIids
#define IVectorView_WindowId_GetRuntimeClassName __FIVectorView_1_WindowId_GetRuntimeClassName
#define IVectorView_WindowId_GetTrustLevel __FIVectorView_1_WindowId_GetTrustLevel
#define IVectorView_WindowId_GetAt __FIVectorView_1_WindowId_GetAt
#define IVectorView_WindowId_get_Size __FIVectorView_1_WindowId_get_Size
#define IVectorView_WindowId_IndexOf __FIVectorView_1_WindowId_IndexOf
#define IVectorView_WindowId_GetMany __FIVectorView_1_WindowId_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_WindowId_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IReference<ABI::Windows::UI::Color > interface
 */
#ifndef ____FIReference_1_Color_INTERFACE_DEFINED__
#define ____FIReference_1_Color_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIReference_1_Color, 0xab8e5d11, 0xb0c1, 0x5a21, 0x95,0xae, 0xf1,0x6b,0xf3,0xa3,0x76,0x24);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("ab8e5d11-b0c1-5a21-95ae-f16bf3a37624")
            IReference<ABI::Windows::UI::Color > : IReference_impl<ABI::Windows::UI::Color >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIReference_1_Color, 0xab8e5d11, 0xb0c1, 0x5a21, 0x95,0xae, 0xf1,0x6b,0xf3,0xa3,0x76,0x24)
#endif
#else
typedef struct __FIReference_1_ColorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIReference_1_Color *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIReference_1_Color *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIReference_1_Color *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIReference_1_Color *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIReference_1_Color *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIReference_1_Color *This,
        TrustLevel *trustLevel);

    /*** IReference<ABI::Windows::UI::Color > methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Value)(
        __FIReference_1_Color *This,
        struct __x_ABI_CWindows_CUI_CColor *value);

    END_INTERFACE
} __FIReference_1_ColorVtbl;

interface __FIReference_1_Color {
    CONST_VTBL __FIReference_1_ColorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIReference_1_Color_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIReference_1_Color_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIReference_1_Color_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIReference_1_Color_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIReference_1_Color_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIReference_1_Color_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IReference<ABI::Windows::UI::Color > methods ***/
#define __FIReference_1_Color_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_QueryInterface(__FIReference_1_Color* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG __FIReference_1_Color_AddRef(__FIReference_1_Color* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIReference_1_Color_Release(__FIReference_1_Color* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetIids(__FIReference_1_Color* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetRuntimeClassName(__FIReference_1_Color* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static __WIDL_INLINE HRESULT __FIReference_1_Color_GetTrustLevel(__FIReference_1_Color* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IReference<ABI::Windows::UI::Color > methods ***/
static __WIDL_INLINE HRESULT __FIReference_1_Color_get_Value(__FIReference_1_Color* This,struct __x_ABI_CWindows_CUI_CColor *value) {
    return This->lpVtbl->get_Value(This,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IReference_Color IID___FIReference_1_Color
#define IReference_ColorVtbl __FIReference_1_ColorVtbl
#define IReference_Color __FIReference_1_Color
#define IReference_Color_QueryInterface __FIReference_1_Color_QueryInterface
#define IReference_Color_AddRef __FIReference_1_Color_AddRef
#define IReference_Color_Release __FIReference_1_Color_Release
#define IReference_Color_GetIids __FIReference_1_Color_GetIids
#define IReference_Color_GetRuntimeClassName __FIReference_1_Color_GetRuntimeClassName
#define IReference_Color_GetTrustLevel __FIReference_1_Color_GetTrustLevel
#define IReference_Color_get_Value __FIReference_1_Color_get_Value
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIReference_1_Color_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_ui_h__ */
