guiddef.h (4703B) - Raw
1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 #ifndef GUID_DEFINED 6 #define GUID_DEFINED 7 8 /* Make sure __LONG32 is defined. */ 9 #include <_mingw.h> 10 11 #ifdef __WIDL__ 12 typedef struct { 13 unsigned long Data1; 14 unsigned short Data2; 15 unsigned short Data3; 16 byte Data4[8]; 17 } GUID; 18 #else 19 typedef struct _GUID { 20 unsigned __LONG32 Data1; 21 unsigned short Data2; 22 unsigned short Data3; 23 unsigned char Data4[8]; 24 } GUID; 25 #endif 26 #endif 27 28 #if defined(__cplusplus) && (USE___UUIDOF == 0) 29 extern "C++" { 30 #if __cpp_constexpr >= 200704l && __cpp_inline_variables >= 201606L 31 __extension__ template<typename T> struct __mingw_uuidof_s; 32 __extension__ template<typename T> constexpr const GUID &__mingw_uuidof(); 33 #else 34 __extension__ template<typename T> const GUID &__mingw_uuidof(); 35 #endif 36 } 37 #endif 38 39 #ifndef FAR 40 #define FAR 41 #endif 42 43 #ifndef DECLSPEC_SELECTANY 44 #define DECLSPEC_SELECTANY __declspec(selectany) 45 #endif 46 47 #ifndef EXTERN_C 48 #ifdef __cplusplus 49 #define EXTERN_C extern "C" 50 #else 51 #define EXTERN_C extern 52 #endif 53 #endif 54 55 #ifdef DEFINE_GUID 56 #undef DEFINE_GUID 57 #endif 58 59 #ifdef INITGUID 60 #ifdef __cplusplus 61 #define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) EXTERN_C const GUID DECLSPEC_SELECTANY name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 62 #else 63 #define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID DECLSPEC_SELECTANY name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 64 #endif 65 #else 66 /* __declspec(selectany) must be applied to initialized objects on GCC 5 hence must not be used here. */ 67 #define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) EXTERN_C const GUID name 68 #endif 69 70 #define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID (name, l, w1, w2, 0xc0, 0, 0, 0, 0, 0, 0, 0x46) 71 72 #ifndef _GUIDDEF_H_ 73 #define _GUIDDEF_H_ 74 75 #ifndef __LPGUID_DEFINED__ 76 #define __LPGUID_DEFINED__ 77 typedef GUID *LPGUID; 78 #endif 79 80 #ifndef __LPCGUID_DEFINED__ 81 #define __LPCGUID_DEFINED__ 82 typedef const GUID *LPCGUID; 83 #endif 84 85 #ifndef __IID_DEFINED__ 86 #define __IID_DEFINED__ 87 88 typedef GUID IID; 89 typedef IID *LPIID; 90 91 #define IID_NULL GUID_NULL 92 #define IsEqualIID(riid1, riid2) IsEqualGUID (riid1, riid2) 93 94 #ifndef CLSID_DEFINED 95 #define CLSID_DEFINED 96 typedef GUID CLSID; 97 #endif 98 99 typedef CLSID *LPCLSID; 100 101 #define CLSID_NULL GUID_NULL 102 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID (rclsid1, rclsid2) 103 typedef GUID FMTID; 104 typedef FMTID *LPFMTID; 105 #define FMTID_NULL GUID_NULL 106 #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID (rfmtid1, rfmtid2) 107 108 #ifdef __WIDL_proxy 109 #define __MIDL_CONST 110 #else 111 #define __MIDL_CONST const 112 #endif 113 114 #ifndef _REFGUID_DEFINED 115 #define _REFGUID_DEFINED 116 #ifdef __cplusplus 117 #define REFGUID const GUID & 118 #else 119 #define REFGUID const GUID *__MIDL_CONST 120 #endif 121 #endif 122 123 #ifndef _REFIID_DEFINED 124 #define _REFIID_DEFINED 125 #ifdef __cplusplus 126 #define REFIID const IID & 127 #else 128 #define REFIID const IID *__MIDL_CONST 129 #endif 130 #endif 131 132 #ifndef _REFCLSID_DEFINED 133 #define _REFCLSID_DEFINED 134 #ifdef __cplusplus 135 #define REFCLSID const IID & 136 #else 137 #define REFCLSID const IID *__MIDL_CONST 138 #endif 139 #endif 140 141 #ifndef _REFFMTID_DEFINED 142 #define _REFFMTID_DEFINED 143 #ifdef __cplusplus 144 #define REFFMTID const IID & 145 #else 146 #define REFFMTID const IID *__MIDL_CONST 147 #endif 148 #endif 149 #endif 150 151 #ifndef __WIDL__ 152 #ifndef _SYS_GUID_OPERATORS_ 153 #define _SYS_GUID_OPERATORS_ 154 #include <string.h> 155 156 #ifdef __cplusplus 157 __inline int InlineIsEqualGUID (REFGUID rguid1, REFGUID rguid2) { 158 return ((&rguid1.Data1)[0] == (&rguid2.Data1)[0] && (&rguid1.Data1)[1] == (&rguid2.Data1)[1] && (&rguid1.Data1)[2] == (&rguid2.Data1)[2] && (&rguid1.Data1)[3] == (&rguid2.Data1)[3]); 159 } 160 161 __inline int IsEqualGUID (REFGUID rguid1, REFGUID rguid2) { 162 return !memcmp (&rguid1,&rguid2, sizeof (GUID)); 163 } 164 #else 165 #define InlineIsEqualGUID(rguid1, rguid2) ((&(rguid1)->Data1)[0] == (&(rguid2)->Data1)[0] && (&(rguid1)->Data1)[1] == (&(rguid2)->Data1)[1] && (&(rguid1)->Data1)[2] == (&(rguid2)->Data1)[2] && (&(rguid1)->Data1)[3] == (&(rguid2)->Data1)[3]) 166 #define IsEqualGUID(rguid1, rguid2) (!memcmp (rguid1, rguid2, sizeof (GUID))) 167 #endif 168 169 #ifdef __INLINE_ISEQUAL_GUID 170 #undef IsEqualGUID 171 #define IsEqualGUID(rguid1, rguid2) InlineIsEqualGUID (rguid1, rguid2) 172 #endif 173 174 #define IsEqualIID(riid1, riid2) IsEqualGUID (riid1, riid2) 175 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID (rclsid1, rclsid2) 176 177 #if !defined (_SYS_GUID_OPERATOR_EQ_) && !defined (_NO_SYS_GUID_OPERATOR_EQ_) 178 #define _SYS_GUID_OPERATOR_EQ_ 179 #ifdef __cplusplus 180 __inline bool operator== (REFGUID guidOne, REFGUID guidOther) { return !!IsEqualGUID (guidOne, guidOther); } 181 __inline bool operator!= (REFGUID guidOne, REFGUID guidOther) { return ! (guidOne == guidOther); } 182 #endif 183 #endif 184 185 #endif 186 #endif 187 #endif