RetroArch
comdecl.h
Go to the documentation of this file.
1 // comdecl.h: Macros to facilitate COM interface and GUID declarations.
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 
4 #ifndef _COMDECL_H_
5 #define _COMDECL_H_
6 
7 #ifndef _XBOX
8  #include <basetyps.h> // For standard COM interface macros
9 #else
10  #pragma warning(push)
11  #pragma warning(disable:4061)
12  #include <xtl.h> // Required by xobjbase.h
13  #include <xobjbase.h> // Special definitions for Xbox build
14  #pragma warning(pop)
15 #endif
16 
17 // The DEFINE_CLSID() and DEFINE_IID() macros defined below allow COM GUIDs to
18 // be declared and defined in such a way that clients can obtain the GUIDs using
19 // either the __uuidof() extension or the old-style CLSID_Foo / IID_IFoo names.
20 // If using the latter approach, the client can also choose whether to get the
21 // GUID definitions by defining the INITGUID preprocessor constant or by linking
22 // to a GUID library. This works in either C or C++.
23 
24 #if defined(__cplusplus) && defined(_MSC_VER)
25 
26  #define DECLSPEC_UUID_WRAPPER(x) __declspec(uuid(#x))
27  #ifdef INITGUID
28 
29  #define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
30  class DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) className; \
31  EXTERN_C const GUID DECLSPEC_SELECTANY CLSID_##className = __uuidof(className)
32 
33  #define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
34  interface DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) interfaceName; \
35  EXTERN_C const GUID DECLSPEC_SELECTANY IID_##interfaceName = __uuidof(interfaceName)
36 
37  #else // INITGUID
38 
39  #define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
40  class DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) className; \
41  EXTERN_C const GUID CLSID_##className
42 
43  #define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
44  interface DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) interfaceName; \
45  EXTERN_C const GUID IID_##interfaceName
46 
47  #endif // INITGUID
48 
49 #else // __cplusplus
50 
51  #define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
52  DEFINE_GUID(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8)
53 
54  #define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
55  DEFINE_GUID(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8)
56 
57 #endif // __cplusplus
58 
59 #endif // #ifndef _COMDECL_H_