1 // MyWindows.h
2 
3 #ifndef __MYWINDOWS_H
4 #define __MYWINDOWS_H
5 
6 #ifdef _WIN32
7 
8 #include <windows.h>
9 
10 #else
11 
12 #include <stddef.h> // for wchar_t
13 #include <string.h>
14 
15 #include "MyGuidDef.h"
16 
17 typedef char CHAR;
18 typedef unsigned char UCHAR;
19 
20 #undef BYTE
21 typedef unsigned char BYTE;
22 
23 typedef short SHORT;
24 typedef unsigned short USHORT;
25 
26 #undef WORD
27 typedef unsigned short WORD;
28 typedef short VARIANT_BOOL;
29 
30 typedef int INT;
31 typedef Int32 INT32;
32 typedef unsigned int UINT;
33 typedef UInt32 UINT32;
34 typedef INT32 LONG;   // LONG, ULONG and DWORD must be 32-bit
35 typedef UINT32 ULONG;
36 
37 #undef DWORD
38 typedef UINT32 DWORD;
39 
40 typedef Int64 LONGLONG;
41 typedef UInt64 ULONGLONG;
42 
43 typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER;
44 typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER;
45 
46 typedef const CHAR *LPCSTR;
47 typedef CHAR TCHAR;
48 typedef const TCHAR *LPCTSTR;
49 typedef wchar_t WCHAR;
50 typedef WCHAR OLECHAR;
51 typedef const WCHAR *LPCWSTR;
52 typedef OLECHAR *BSTR;
53 typedef const OLECHAR *LPCOLESTR;
54 typedef OLECHAR *LPOLESTR;
55 
56 typedef struct _FILETIME
57 {
58   DWORD dwLowDateTime;
59   DWORD dwHighDateTime;
60 }FILETIME;
61 
62 #define HRESULT LONG
63 #define FAILED(Status) ((HRESULT)(Status)<0)
64 typedef ULONG PROPID;
65 typedef LONG SCODE;
66 
67 #define S_OK    ((HRESULT)0x00000000L)
68 #define S_FALSE ((HRESULT)0x00000001L)
69 #define E_NOTIMPL ((HRESULT)0x80004001L)
70 #define E_NOINTERFACE ((HRESULT)0x80004002L)
71 #define E_ABORT ((HRESULT)0x80004004L)
72 #define E_FAIL ((HRESULT)0x80004005L)
73 #define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L)
74 #define E_OUTOFMEMORY ((HRESULT)0x8007000EL)
75 #define E_INVALIDARG ((HRESULT)0x80070057L)
76 
77 #ifdef _MSC_VER
78 #define STDMETHODCALLTYPE __stdcall
79 #else
80 #define STDMETHODCALLTYPE
81 #endif
82 
83 #define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f
84 #define STDMETHOD(f) STDMETHOD_(HRESULT, f)
85 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
86 #define STDMETHODIMP STDMETHODIMP_(HRESULT)
87 
88 #define PURE = 0
89 
90 #define MIDL_INTERFACE(x) struct
91 
92 #ifdef __cplusplus
93 
94 DEFINE_GUID(IID_IUnknown,
95 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
96 struct IUnknown
97 {
98   STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;
99   STDMETHOD_(ULONG, AddRef)() PURE;
100   STDMETHOD_(ULONG, Release)() PURE;
101   #ifndef _WIN32
~IUnknownIUnknown102   virtual ~IUnknown() {}
103   #endif
104 };
105 
106 typedef IUnknown *LPUNKNOWN;
107 
108 #endif
109 
110 #define VARIANT_TRUE ((VARIANT_BOOL)-1)
111 #define VARIANT_FALSE ((VARIANT_BOOL)0)
112 
113 enum VARENUM
114 {
115   VT_EMPTY = 0,
116   VT_NULL = 1,
117   VT_I2 = 2,
118   VT_I4 = 3,
119   VT_R4 = 4,
120   VT_R8 = 5,
121   VT_CY = 6,
122   VT_DATE = 7,
123   VT_BSTR = 8,
124   VT_DISPATCH = 9,
125   VT_ERROR = 10,
126   VT_BOOL = 11,
127   VT_VARIANT = 12,
128   VT_UNKNOWN = 13,
129   VT_DECIMAL = 14,
130   VT_I1 = 16,
131   VT_UI1 = 17,
132   VT_UI2 = 18,
133   VT_UI4 = 19,
134   VT_I8 = 20,
135   VT_UI8 = 21,
136   VT_INT = 22,
137   VT_UINT = 23,
138   VT_VOID = 24,
139   VT_HRESULT = 25,
140   VT_FILETIME = 64
141 };
142 
143 typedef unsigned short VARTYPE;
144 typedef WORD PROPVAR_PAD1;
145 typedef WORD PROPVAR_PAD2;
146 typedef WORD PROPVAR_PAD3;
147 
148 #ifdef __cplusplus
149 
150 typedef struct tagPROPVARIANT
151 {
152   VARTYPE vt;
153   PROPVAR_PAD1 wReserved1;
154   PROPVAR_PAD2 wReserved2;
155   PROPVAR_PAD3 wReserved3;
156   union
157   {
158     CHAR cVal;
159     UCHAR bVal;
160     SHORT iVal;
161     USHORT uiVal;
162     LONG lVal;
163     ULONG ulVal;
164     INT intVal;
165     UINT uintVal;
166     LARGE_INTEGER hVal;
167     ULARGE_INTEGER uhVal;
168     VARIANT_BOOL boolVal;
169     SCODE scode;
170     FILETIME filetime;
171     BSTR bstrVal;
172   };
173 } PROPVARIANT;
174 
175 typedef PROPVARIANT tagVARIANT;
176 typedef tagVARIANT VARIANT;
177 typedef VARIANT VARIANTARG;
178 
179 MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop);
180 MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src);
181 
182 #endif
183 
184 MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len);
185 MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz);
186 MY_EXTERN_C void SysFreeString(BSTR bstr);
187 MY_EXTERN_C UINT SysStringByteLen(BSTR bstr);
188 MY_EXTERN_C UINT SysStringLen(BSTR bstr);
189 
190 MY_EXTERN_C DWORD GetLastError();
191 MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2);
192 
193 #define CP_ACP    0
194 #define CP_OEMCP  1
195 
196 typedef enum tagSTREAM_SEEK
197 {
198   STREAM_SEEK_SET = 0,
199   STREAM_SEEK_CUR = 1,
200   STREAM_SEEK_END = 2
201 } STREAM_SEEK;
202 
203 #endif
204 #endif
205