1 /* 2 * Copyright (C) 2000 Alexandre Julliard 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #ifndef GUID_DEFINED 20 #define GUID_DEFINED 21 22 typedef struct _GUID 23 { 24 #ifdef _MSC_VER 25 unsigned long Data1; 26 #else 27 unsigned int Data1; 28 #endif 29 unsigned short Data2; 30 unsigned short Data3; 31 unsigned char Data4[ 8 ]; 32 } GUID; 33 #endif 34 35 #ifndef FAR 36 #define FAR 37 #endif 38 39 #ifndef DECLSPEC_SELECTANY 40 #define DECLSPEC_SELECTANY __declspec(selectany) 41 #endif 42 43 #ifndef EXTERN_C 44 #ifdef __cplusplus 45 #define EXTERN_C extern "C" 46 #else 47 #define EXTERN_C extern 48 #endif 49 #endif 50 51 #undef DEFINE_GUID 52 53 #ifdef INITGUID 54 #ifdef __cplusplus 55 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 56 EXTERN_C const GUID DECLSPEC_SELECTANY name = \ 57 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 58 #else 59 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 60 const GUID DECLSPEC_SELECTANY name = \ 61 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 62 #endif 63 #else 64 #if __GNUC__ >= 8 65 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 66 EXTERN_C const GUID DECLSPEC_SELECTANY name 67 #else 68 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 69 EXTERN_C const GUID name 70 #endif // __GNUC__ >= 7 71 #endif 72 73 #define DEFINE_OLEGUID(name, l, w1, w2) \ 74 DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) 75 76 #ifndef _GUIDDEF_H_ 77 #define _GUIDDEF_H_ 78 79 #ifndef __LPGUID_DEFINED__ 80 #define __LPGUID_DEFINED__ 81 typedef GUID *LPGUID; 82 #endif 83 84 #ifndef __LPCGUID_DEFINED__ 85 #define __LPCGUID_DEFINED__ 86 typedef const GUID *LPCGUID; 87 #endif 88 89 #ifndef __IID_DEFINED__ 90 #define __IID_DEFINED__ 91 92 typedef GUID IID,*LPIID; 93 typedef GUID CLSID,*LPCLSID; 94 typedef GUID FMTID,*LPFMTID; 95 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) 96 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) 97 #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2) 98 #define IID_NULL GUID_NULL 99 #define CLSID_NULL GUID_NULL 100 #define FMTID_NULL GUID_NULL 101 102 #ifdef __midl_proxy 103 #define __MIDL_CONST 104 #else 105 #define __MIDL_CONST const 106 #endif 107 108 #endif /* ndef __IID_DEFINED__ */ 109 110 #ifdef __cplusplus 111 #define REFGUID const GUID & 112 #define REFCLSID const CLSID & 113 #define REFIID const IID & 114 #define REFFMTID const FMTID & 115 #else 116 #define REFGUID const GUID* __MIDL_CONST 117 #define REFCLSID const CLSID* __MIDL_CONST 118 #define REFIID const IID* __MIDL_CONST 119 #define REFFMTID const FMTID* __MIDL_CONST 120 #endif 121 122 #if !defined(__midl) && !defined(__WIDL__) 123 #include <string.h> 124 #ifdef __cplusplus 125 126 __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) 127 { 128 return ( 129 ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] && 130 ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] && 131 ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] && 132 ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]); 133 } 134 135 __inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2) 136 { 137 return !memcmp(&rguid1, &rguid2, sizeof(GUID)); 138 } 139 140 #else 141 142 #define InlineIsEqualGUID(rguid1, rguid2) \ 143 (((unsigned long *)rguid1)[0] == ((unsigned long *)rguid2)[0] && \ 144 ((unsigned long *)rguid1)[1] == ((unsigned long *)rguid2)[1] && \ 145 ((unsigned long *)rguid1)[2] == ((unsigned long *)rguid2)[2] && \ 146 ((unsigned long *)rguid1)[3] == ((unsigned long *)rguid2)[3]) 147 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) 148 149 #endif 150 #endif /* __midl && __WIDL__ */ 151 152 #ifdef __cplusplus 153 #include <string.h> 154 #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_ 155 #define _SYS_GUID_OPERATOR_EQ_ 156 inline bool operator==(const GUID& guidOne, const GUID& guidOther) 157 { 158 return !memcmp(&guidOne,&guidOther,sizeof(GUID)); 159 } 160 inline bool operator!=(const GUID& guidOne, const GUID& guidOther) 161 { 162 return !(guidOne == guidOther); 163 } 164 #endif 165 #endif 166 167 #endif /* _GUIDDEF_H_ */ 168