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 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 65 EXTERN_C const GUID name 66 #endif 67 68 #define DEFINE_OLEGUID(name, l, w1, w2) \ 69 DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) 70 71 #ifndef _GUIDDEF_H_ 72 #define _GUIDDEF_H_ 73 74 #ifndef __LPGUID_DEFINED__ 75 #define __LPGUID_DEFINED__ 76 typedef GUID *LPGUID; 77 #endif 78 79 #ifndef __LPCGUID_DEFINED__ 80 #define __LPCGUID_DEFINED__ 81 typedef const GUID *LPCGUID; 82 #endif 83 84 #ifndef __IID_DEFINED__ 85 #define __IID_DEFINED__ 86 87 typedef GUID IID,*LPIID; 88 typedef GUID CLSID,*LPCLSID; 89 typedef GUID FMTID,*LPFMTID; 90 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) 91 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) 92 #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2) 93 #define IID_NULL GUID_NULL 94 #define CLSID_NULL GUID_NULL 95 #define FMTID_NULL GUID_NULL 96 97 #ifdef __midl_proxy 98 #define __MIDL_CONST 99 #else 100 #define __MIDL_CONST const 101 #endif 102 103 #endif /* ndef __IID_DEFINED__ */ 104 105 #if defined(__cplusplus) && !defined(CINTERFACE) 106 #define REFGUID const GUID & 107 #define REFCLSID const CLSID & 108 #define REFIID const IID & 109 #define REFFMTID const FMTID & 110 #else /* !defined(__cplusplus) && !defined(CINTERFACE) */ 111 #define REFGUID const GUID* __MIDL_CONST 112 #define REFCLSID const CLSID* __MIDL_CONST 113 #define REFIID const IID* __MIDL_CONST 114 #define REFFMTID const FMTID* __MIDL_CONST 115 #endif /* !defined(__cplusplus) && !defined(CINTERFACE) */ 116 117 #if !defined(__midl) && !defined(__WIDL__) 118 #include <string.h> 119 #if defined(__cplusplus) && !defined(CINTERFACE) 120 121 __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) 122 { 123 return ( 124 ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] && 125 ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] && 126 ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] && 127 ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]); 128 } 129 130 __inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2) 131 { 132 return !memcmp(&rguid1, &rguid2, sizeof(GUID)); 133 } 134 135 #else /* defined(__cplusplus) && !defined(CINTERFACE) */ 136 137 #define InlineIsEqualGUID(rguid1, rguid2) \ 138 (((unsigned long *)rguid1)[0] == ((unsigned long *)rguid2)[0] && \ 139 ((unsigned long *)rguid1)[1] == ((unsigned long *)rguid2)[1] && \ 140 ((unsigned long *)rguid1)[2] == ((unsigned long *)rguid2)[2] && \ 141 ((unsigned long *)rguid1)[3] == ((unsigned long *)rguid2)[3]) 142 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) 143 144 #endif /* defined(__cplusplus) && !defined(CINTERFACE) */ 145 #endif /* __midl && __WIDL__ */ 146 147 #if defined(__cplusplus) && !defined(CINTERFACE) 148 #include <string.h> 149 #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_ 150 #define _SYS_GUID_OPERATOR_EQ_ 151 inline bool operator==(const GUID& guidOne, const GUID& guidOther) 152 { 153 return !memcmp(&guidOne,&guidOther,sizeof(GUID)); 154 } 155 inline bool operator!=(const GUID& guidOne, const GUID& guidOther) 156 { 157 return !(guidOne == guidOther); 158 } 159 #endif 160 #endif 161 162 #endif /* _GUIDDEF_H_ */ 163