Install msysDVLPR-1.0.0-alpha-1
[msysgit.git] / include / basetyps.h
blobed0912c260b8838ba2ff2dbd81e929d6ef010662
1 #ifndef _BASETYPS_H
2 #define _BASETYPS_H
4 #ifndef __OBJC__
5 #ifdef __cplusplus
6 #define EXTERN_C extern "C"
7 #else
8 #define EXTERN_C extern
9 #endif
10 #define STDMETHODCALLTYPE __stdcall
11 #define STDMETHODVCALLTYPE __cdecl
12 #define STDAPICALLTYPE __stdcall
13 #define STDAPIVCALLTYPE __cdecl
14 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
15 #define STDAPI_(t) EXTERN_C t STDAPICALLTYPE
16 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
17 #define STDMETHODIMP_(t) t STDMETHODCALLTYPE
18 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
19 #define STDAPIV_(t) EXTERN_C t STDAPIVCALLTYPE
20 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
21 #define STDMETHODIMPV_(t) t STDMETHODVCALLTYPE
22 #define interface struct
23 #if defined(__cplusplus) && !defined(CINTERFACE)
24 #define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m
25 #define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m
26 #define PURE =0
27 #define THIS_
28 #define THIS void
30 __attribute__((com_interface)) is obsolete in __GNUC__ >= 3
31 g++ vtables are now COM-compatible by default
33 #if defined(__GNUC__) && __GNUC__ < 3 && !defined(NOCOMATTRIBUTE)
34 #define DECLARE_INTERFACE(i) interface __attribute__((com_interface)) i
35 #define DECLARE_INTERFACE_(i,b) interface __attribute__((com_interface)) i : public b
36 #else
37 #define DECLARE_INTERFACE(i) interface i
38 #define DECLARE_INTERFACE_(i,b) interface i : public b
39 #endif
40 #else
41 #define STDMETHOD(m) HRESULT(STDMETHODCALLTYPE *m)
42 #define STDMETHOD_(t,m) t(STDMETHODCALLTYPE *m)
43 #define PURE
44 #define THIS_ INTERFACE *,
45 #define THIS INTERFACE *
46 #ifndef CONST_VTABLE
47 #define CONST_VTABLE
48 #endif
49 #define DECLARE_INTERFACE(i) \
50 typedef interface i { CONST_VTABLE struct i##Vtbl *lpVtbl; } i; \
51 typedef CONST_VTABLE struct i##Vtbl i##Vtbl; \
52 CONST_VTABLE struct i##Vtbl
53 #define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i)
54 #endif
55 #define BEGIN_INTERFACE
56 #define END_INTERFACE
58 #define FWD_DECL(i) typedef interface i i
59 #if defined(__cplusplus) && !defined(CINTERFACE)
60 #define IENUM_THIS(T)
61 #define IENUM_THIS_(T)
62 #else
63 #define IENUM_THIS(T) T*
64 #define IENUM_THIS_(T) T*,
65 #endif
66 #define DECLARE_ENUMERATOR_(I,T) \
67 DECLARE_INTERFACE_(I,IUnknown) \
68 { \
69 STDMETHOD(QueryInterface)(IENUM_THIS_(I) REFIID,PVOID*) PURE; \
70 STDMETHOD_(ULONG,AddRef)(IENUM_THIS(I)) PURE; \
71 STDMETHOD_(ULONG,Release)(IENUM_THIS(I)) PURE; \
72 STDMETHOD(Next)(IENUM_THIS_(I) ULONG,T*,ULONG*) PURE; \
73 STDMETHOD(Skip)(IENUM_THIS_(I) ULONG) PURE; \
74 STDMETHOD(Reset)(IENUM_THIS(I)) PURE; \
75 STDMETHOD(Clone)(IENUM_THIS_(I) I**) PURE; \
77 #define DECLARE_ENUMERATOR(T) DECLARE_ENUMERATOR_(IEnum##T,T)
79 #endif /* __OBJC__ */
81 #ifndef _GUID_DEFINED /* also defined in winnt.h */
82 #define _GUID_DEFINED
83 typedef struct _GUID
85 unsigned long Data1;
86 unsigned short Data2;
87 unsigned short Data3;
88 unsigned char Data4[8];
89 } GUID,*REFGUID,*LPGUID;
90 #endif /* _GUID_DEFINED */
91 #ifndef UUID_DEFINED
92 #define UUID_DEFINED
93 typedef GUID UUID;
94 #endif /* UUID_DEFINED */
95 typedef GUID IID;
96 typedef GUID CLSID;
97 typedef CLSID *LPCLSID;
98 typedef IID *LPIID;
99 typedef IID *REFIID;
100 typedef CLSID *REFCLSID;
101 typedef GUID FMTID;
102 typedef FMTID *REFFMTID;
103 typedef unsigned long error_status_t;
104 #define uuid_t UUID
105 typedef unsigned long PROPID;
107 #ifndef _REFGUID_DEFINED
108 #ifdef __cplusplus
109 #define REFGUID const GUID&
110 #define REFIID const IID&
111 #define REFCLSID const CLSID&
112 #else
113 #define REFGUID const GUID* const
114 #define REFIID const IID* const
115 #define REFCLSID const CLSID* const
116 #endif
117 #define _REFGUID_DEFINED
118 #define _REFGIID_DEFINED
119 #define _REFCLSID_DEFINED
120 #endif
121 #ifndef GUID_SECTION
122 #define GUID_SECTION ".text"
123 #endif
124 #ifdef __GNUC__
125 #define GUID_SECT __attribute__ ((section (GUID_SECTION)))
126 #else
127 #define GUID_SECT
128 #endif
129 #if !defined(INITGUID) || (defined(INITGUID) && defined(__cplusplus))
130 #define GUID_EXT EXTERN_C
131 #else
132 #define GUID_EXT
133 #endif
134 #ifdef INITGUID
135 #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
136 #define DEFINE_OLEGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
137 #else
138 #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n
139 #define DEFINE_OLEGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
140 #endif
141 #endif