1 //+---------------------------------------------------------------------------
2 //
3 //  Microsoft Windows
4 //  Copyright (c) Microsoft Corporation.  All rights reserved.
5 //
6 //  File:           guiddef.h
7 //
8 //  Contents:     GUID definition
9 //
10 //----------------------------------------------------------------------------
11
12 #ifndef GUID_DEFINED
13 #define GUID_DEFINED
14 #if defined(__midl)
15 typedef struct {
16       unsigned long  Data1;
17       unsigned short Data2;
18       unsigned short Data3;
19       byte                  Data4[ 8 ];
20 } GUID;
21 #else
22 typedef struct _GUID {
23       unsigned long  Data1;
24       unsigned short Data2;
25       unsigned short Data3;
26       unsigned char  Data4[ 8 ];
27 } GUID;
28 #endif
29 #endif
30
31 #ifndef FAR
32 #ifdef _WIN32
33 #define FAR
34 #else
35 #define FAR _far
36 #endif
37 #endif
38
39 #ifndef DECLSPEC_SELECTANY
40 #if (_MSC_VER >= 1100)
41 #define DECLSPEC_SELECTANY  __declspec(selectany)
42 #else
43 #define DECLSPEC_SELECTANY
44 #endif
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 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
61              EXTERN_C const GUID DECLSPEC_SELECTANY name \
62                           = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
63 #else
64 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
65       EXTERN_C const GUID FAR name
66 #endif // INITGUID
67
68 #define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
69
70 #ifndef _GUIDDEF_H_
71 #define _GUIDDEF_H_
72
73 #ifndef __LPGUID_DEFINED__
74 #define __LPGUID_DEFINED__
75 typedef GUID *LPGUID;
76 #endif
77
78 #ifndef __LPCGUID_DEFINED__
79 #define __LPCGUID_DEFINED__
80 typedef const GUID *LPCGUID;
81 #endif
82
83 #ifndef __IID_DEFINED__
84 #define __IID_DEFINED__
85
86 typedef GUID IID;
87 typedef IID *LPIID;
88 #define IID_NULL                    GUID_NULL
89 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
90 typedef GUID CLSID;
91 typedef CLSID *LPCLSID;
92 #define CLSID_NULL                GUID_NULL
93 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
94 typedef GUID FMTID;
95 typedef FMTID *LPFMTID;
96 #define FMTID_NULL                GUID_NULL
97 #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
98
99 #ifdef __midl_proxy
100 #define __MIDL_CONST
101 #else
102 #define __MIDL_CONST const
103 #endif
104
105 #ifndef _REFGUID_DEFINED
106 #define _REFGUID_DEFINED
107 #ifdef __cplusplus
108 #define REFGUID const GUID &
109 #else
110 #define REFGUID const GUID * __MIDL_CONST
111 #endif
112 #endif
113
114 #ifndef _REFIID_DEFINED
115 #define _REFIID_DEFINED
116 #ifdef __cplusplus
Lines 117 ... 126 are skipped.
127 #else
128 #define REFCLSID const IID * __MIDL_CONST
129 #endif
130 #endif
131
132 #ifndef _REFFMTID_DEFINED
133 #define _REFFMTID_DEFINED
134 #ifdef __cplusplus
135 #define REFFMTID const IID &
136 #else
137 #define REFFMTID const IID * __MIDL_CONST
138 #endif
139 #endif
140
141 #endif // !__IID_DEFINED__
142
143 #if !defined (__midl)
144 #if !defined (_SYS_GUID_OPERATORS_)
145 #define _SYS_GUID_OPERATORS_
146 #include <string.h>
147
148 // Faster (but makes code fatter) inline version...use sparingly
149 #ifdef __cplusplus
150 __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
151 {
152      return (
153           ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] &&
154           ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] &&
155           ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] &&
156           ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]);
157 }
158
159 __inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
160 {
161       return !memcmp(&rguid1, &rguid2, sizeof(GUID));
162 }
163
164 #else     // ! __cplusplus
165
166 #define InlineIsEqualGUID(rguid1, rguid2)  \
167              (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] &&     \
168              ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] &&      \
169              ((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] &&      \
170              ((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])
171
172 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
173
174 #endif  // __cplusplus
175
176 #ifdef __INLINE_ISEQUAL_GUID
177 #undef IsEqualGUID
178 #define IsEqualGUID(rguid1, rguid2) InlineIsEqualGUID(rguid1, rguid2)
179 #endif
180
181 // Same type, different name
182
183 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
184 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
185
186
187 #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_
188 #define _SYS_GUID_OPERATOR_EQ_
189 // A couple of C++ helpers
190
191 #ifdef __cplusplus
192 __inline int operator==(REFGUID guidOne, REFGUID guidOther)
193 {
194       return IsEqualGUID(guidOne,guidOther);
195 }
196
197 __inline int operator!=(REFGUID guidOne, REFGUID guidOther)
198 {
199       return !(guidOne == guidOther);
200 }
201 #endif
202 #endif  // _SYS_GUID_OPERATOR_EQ_
203 #endif  // _SYS_GUID_OPERATORS_
204 #endif  // __midl
205 #endif  // _GUIDDEF_H_
206
207