blob: 1cda4f757d0dc74d5d8c84bf85de2275f029ce84 [file] [log] [blame]
Alexandre Julliard0799c1a2002-03-09 23:29:33 +00001/*
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
Alexandre Julliardb08cb172000-08-03 04:19:24 +000019#ifndef GUID_DEFINED
20#define GUID_DEFINED
21typedef struct _GUID
22{
23 unsigned long Data1;
24 unsigned short Data2;
25 unsigned short Data3;
26 unsigned char Data4[ 8 ];
27} GUID;
28#endif
29
Mike McCormacke7447352005-04-20 12:52:07 +000030#ifndef __LPCGUID_DEFINED__
31#define __LPCGUID_DEFINED__
32typedef const GUID *LPCGUID;
33#endif
34
Alexandre Julliardb08cb172000-08-03 04:19:24 +000035#undef DEFINE_GUID
36
37#ifdef INITGUID
Troy Rollo7d19bf52005-09-02 12:17:52 +000038#ifdef __cplusplus
Alexandre Julliardb08cb172000-08-03 04:19:24 +000039#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
Troy Rollo7d19bf52005-09-02 12:17:52 +000040 EXTERN_C const GUID name = \
Alexandre Julliardb08cb172000-08-03 04:19:24 +000041 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
42#else
43#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
Troy Rollo7d19bf52005-09-02 12:17:52 +000044 const GUID name = \
45 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
46#endif
47#else
48#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
49 EXTERN_C const GUID name
Alexandre Julliardb08cb172000-08-03 04:19:24 +000050#endif
51
52#define DEFINE_OLEGUID(name, l, w1, w2) \
53 DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
54
55#ifndef _GUIDDEF_H_
56#define _GUIDDEF_H_
57
58typedef GUID *LPGUID;
59typedef GUID CLSID,*LPCLSID;
Juan Langbd337a82004-02-09 20:48:57 +000060#ifndef __IID_DEFINED__
61#define __IID_DEFINED__
Alexandre Julliardb08cb172000-08-03 04:19:24 +000062typedef GUID IID,*LPIID;
Juan Langbd337a82004-02-09 20:48:57 +000063#endif /* ndef __IID_DEFINED__ */
Alexandre Julliardb08cb172000-08-03 04:19:24 +000064typedef GUID FMTID,*LPFMTID;
65
Mike McCormack90c29ab2004-09-06 21:25:16 +000066#ifdef __midl_proxy
67#define __MIDL_CONST
68#else
69#define __MIDL_CONST const
70#endif
71
Alexandre Julliardb08cb172000-08-03 04:19:24 +000072#if defined(__cplusplus) && !defined(CINTERFACE)
73#define REFGUID const GUID &
74#define REFCLSID const CLSID &
75#define REFIID const IID &
76#define REFFMTID const FMTID &
77#else /* !defined(__cplusplus) && !defined(CINTERFACE) */
Mike McCormack90c29ab2004-09-06 21:25:16 +000078#define REFGUID const GUID* __MIDL_CONST
79#define REFCLSID const CLSID* __MIDL_CONST
80#define REFIID const IID* __MIDL_CONST
81#define REFFMTID const FMTID* __MIDL_CONST
Alexandre Julliardb08cb172000-08-03 04:19:24 +000082#endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
83
84#if defined(__cplusplus) && !defined(CINTERFACE)
85#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
86#else /* defined(__cplusplus) && !defined(CINTERFACE) */
87#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
88#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
89#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
90#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
91
92#if defined(__cplusplus) && !defined(CINTERFACE)
Francois Gouget8a259442001-05-07 18:20:32 +000093#include <string.h>
Ove Kaavenccb257a2000-08-11 00:39:26 +000094inline bool operator==(const GUID& guidOne, const GUID& guidOther)
Alexandre Julliardb08cb172000-08-03 04:19:24 +000095{
96 return !memcmp(&guidOne,&guidOther,sizeof(GUID));
97}
Ove Kaavenccb257a2000-08-11 00:39:26 +000098inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
Alexandre Julliardb08cb172000-08-03 04:19:24 +000099{
100 return !(guidOne == guidOther);
101}
Vincent Béron9a624912002-05-31 23:06:46 +0000102#endif
Alexandre Julliardb08cb172000-08-03 04:19:24 +0000103
104extern const IID GUID_NULL;
105#define IID_NULL GUID_NULL
106#define CLSID_NULL GUID_NULL
107#define FMTID_NULL GUID_NULL
Vincent Béron9a624912002-05-31 23:06:46 +0000108
Alexandre Julliardb08cb172000-08-03 04:19:24 +0000109#endif /* _GUIDDEF_H_ */