Atom
guiddef.h
1 //+---------------------------------------------------------------------------
2 //
3 // Copyright © Microsoft Corp.
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 //
9 // • Redistributions of source code must retain the above copyright notice,
10 // this list of conditions and the following disclaimer.
11 // • Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 // POSSIBILITY OF SUCH DAMAGE.
26 //
27 // File: guiddef.h
28 //
29 // Contents: GUID definition
30 //
31 //----------------------------------------------------------------------------
32 
33 #ifndef GUID_DEFINED
34 #define GUID_DEFINED
35 #if defined(__midl)
36 typedef struct {
37  unsigned long Data1;
38  unsigned short Data2;
39  unsigned short Data3;
40  byte Data4[ 8 ];
41 } GUID;
42 #else
43 typedef struct _GUID {
44 #if defined(_WINDOWS_) || !__LP64__
45  unsigned long Data1;
46 #else
47  unsigned int Data1;
48 #endif
49  unsigned short Data2;
50  unsigned short Data3;
51  unsigned char Data4[ 8 ];
52 } GUID;
53 #endif
54 #endif
55 
56 #ifndef FAR
57 #if defined(_WIN32) || defined(__ANSI__)
58 #define FAR
59 #else
60 #define FAR _far
61 #endif
62 #endif
63 
64 #ifndef DECLSPEC_SELECTANY
65 #if (_MSC_VER >= 1100)
66 #define DECLSPEC_SELECTANY __declspec(selectany)
67 #else
68 #define DECLSPEC_SELECTANY
69 #endif
70 #endif
71 
72 #ifndef EXTERN_C
73 #ifdef __cplusplus
74 #define EXTERN_C extern "C"
75 #else
76 #define EXTERN_C extern
77 #endif
78 #endif
79 
80 #ifdef DEFINE_GUID
81 #undef DEFINE_GUID
82 #endif
83 
84 #ifdef INITGUID
85 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
86  const GUID DECLSPEC_SELECTANY name \
87  = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
88 #else
89 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
90  EXTERN_C const GUID FAR name
91 #endif // INITGUID
92 
93 #define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
94 
95 #ifndef _GUIDDEF_H_
96 #define _GUIDDEF_H_
97 
98 #ifndef __LPGUID_DEFINED__
99 #define __LPGUID_DEFINED__
100 typedef GUID *LPGUID;
101 #endif
102 
103 #ifndef __LPCGUID_DEFINED__
104 #define __LPCGUID_DEFINED__
105 typedef const GUID *LPCGUID;
106 #endif
107 
108 #ifndef __IID_DEFINED__
109 #define __IID_DEFINED__
110 
111 typedef GUID IID;
112 typedef IID *LPIID;
113 #define IID_NULL GUID_NULL
114 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
115 typedef GUID CLSID;
116 typedef CLSID *LPCLSID;
117 #define CLSID_NULL GUID_NULL
118 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
119 typedef GUID FMTID;
120 typedef FMTID *LPFMTID;
121 #define FMTID_NULL GUID_NULL
122 #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
123 
124 #ifdef __midl_proxy
125 #define __MIDL_CONST
126 #else
127 #define __MIDL_CONST const
128 #endif
129 
130 #ifndef _REFGUID_DEFINED
131 #define _REFGUID_DEFINED
132 #ifdef __cplusplus
133 #define REFGUID const GUID &
134 #else
135 #define REFGUID const GUID * __MIDL_CONST
136 #endif
137 #endif
138 
139 #ifndef _REFIID_DEFINED
140 #define _REFIID_DEFINED
141 #ifdef __cplusplus
142 #define REFIID const IID &
143 #else
144 #define REFIID const IID * __MIDL_CONST
145 #endif
146 #endif
147 
148 #ifndef _REFCLSID_DEFINED
149 #define _REFCLSID_DEFINED
150 #ifdef __cplusplus
151 #define REFCLSID const IID &
152 #else
153 #define REFCLSID const IID * __MIDL_CONST
154 #endif
155 #endif
156 
157 #ifndef _REFFMTID_DEFINED
158 #define _REFFMTID_DEFINED
159 #ifdef __cplusplus
160 #define REFFMTID const IID &
161 #else
162 #define REFFMTID const IID * __MIDL_CONST
163 #endif
164 #endif
165 
166 #endif // !__IID_DEFINED__
167 
168 #if !defined (__midl)
169 #if !defined (_SYS_GUID_OPERATORS_)
170 #define _SYS_GUID_OPERATORS_
171 #include <string.h>
172 
173 // Faster (but makes code fatter) inline version...use sparingly
174 #ifdef __cplusplus
175 __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
176 {
177  return (
178  ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] &&
179  ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] &&
180  ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] &&
181  ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]);
182 }
183 
184 __inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
185 {
186  return !memcmp(&rguid1, &rguid2, sizeof(GUID));
187 }
188 
189 #else // ! __cplusplus
190 
191 #define InlineIsEqualGUID(rguid1, rguid2) \
192  (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] && \
193  ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] && \
194  ((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] && \
195  ((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])
196 
197 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
198 
199 #endif // __cplusplus
200 
201 #ifdef __INLINE_ISEQUAL_GUID
202 #undef IsEqualGUID
203 #define IsEqualGUID(rguid1, rguid2) InlineIsEqualGUID(rguid1, rguid2)
204 #endif
205 
206 // Same type, different name
207 
208 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
209 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
210 
211 
212 #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_
213 #define _SYS_GUID_OPERATOR_EQ_
214 // A couple of C++ helpers
215 
216 #ifdef __cplusplus
217 __inline int operator==(REFGUID guidOne, REFGUID guidOther)
218 {
219  return IsEqualGUID(guidOne,guidOther);
220 }
221 
222 __inline int operator!=(REFGUID guidOne, REFGUID guidOther)
223 {
224  return !(guidOne == guidOther);
225 }
226 #endif
227 #endif // _SYS_GUID_OPERATOR_EQ_
228 #endif // _SYS_GUID_OPERATORS_
229 #endif // __midl
230 #endif // _GUIDDEF_H_
Definition: guiddef.h:43