michael@0: // MyWindows.h michael@0: michael@0: #ifndef __MYWINDOWS_H michael@0: #define __MYWINDOWS_H michael@0: michael@0: #ifdef _WIN32 michael@0: michael@0: #include michael@0: michael@0: #define CHAR_PATH_SEPARATOR '\\' michael@0: #define WCHAR_PATH_SEPARATOR L'\\' michael@0: #define STRING_PATH_SEPARATOR "\\" michael@0: #define WSTRING_PATH_SEPARATOR L"\\" michael@0: michael@0: #else michael@0: michael@0: #define CHAR_PATH_SEPARATOR '/' michael@0: #define WCHAR_PATH_SEPARATOR L'/' michael@0: #define STRING_PATH_SEPARATOR "/" michael@0: #define WSTRING_PATH_SEPARATOR L"/" michael@0: michael@0: #include // for wchar_t michael@0: #include michael@0: michael@0: #include "MyGuidDef.h" michael@0: michael@0: typedef char CHAR; michael@0: typedef unsigned char UCHAR; michael@0: michael@0: #undef BYTE michael@0: typedef unsigned char BYTE; michael@0: michael@0: typedef short SHORT; michael@0: typedef unsigned short USHORT; michael@0: michael@0: #undef WORD michael@0: typedef unsigned short WORD; michael@0: typedef short VARIANT_BOOL; michael@0: michael@0: typedef int INT; michael@0: typedef Int32 INT32; michael@0: typedef unsigned int UINT; michael@0: typedef UInt32 UINT32; michael@0: typedef INT32 LONG; // LONG, ULONG and DWORD must be 32-bit michael@0: typedef UINT32 ULONG; michael@0: michael@0: #undef DWORD michael@0: typedef UINT32 DWORD; michael@0: michael@0: typedef Int64 LONGLONG; michael@0: typedef UInt64 ULONGLONG; michael@0: michael@0: typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER; michael@0: typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER; michael@0: michael@0: typedef const CHAR *LPCSTR; michael@0: typedef CHAR TCHAR; michael@0: typedef const TCHAR *LPCTSTR; michael@0: typedef wchar_t WCHAR; michael@0: typedef WCHAR OLECHAR; michael@0: typedef const WCHAR *LPCWSTR; michael@0: typedef OLECHAR *BSTR; michael@0: typedef const OLECHAR *LPCOLESTR; michael@0: typedef OLECHAR *LPOLESTR; michael@0: michael@0: typedef struct _FILETIME michael@0: { michael@0: DWORD dwLowDateTime; michael@0: DWORD dwHighDateTime; michael@0: }FILETIME; michael@0: michael@0: #define HRESULT LONG michael@0: #define FAILED(Status) ((HRESULT)(Status)<0) michael@0: typedef ULONG PROPID; michael@0: typedef LONG SCODE; michael@0: michael@0: #define S_OK ((HRESULT)0x00000000L) michael@0: #define S_FALSE ((HRESULT)0x00000001L) michael@0: #define E_NOTIMPL ((HRESULT)0x80004001L) michael@0: #define E_NOINTERFACE ((HRESULT)0x80004002L) michael@0: #define E_ABORT ((HRESULT)0x80004004L) michael@0: #define E_FAIL ((HRESULT)0x80004005L) michael@0: #define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L) michael@0: #define E_OUTOFMEMORY ((HRESULT)0x8007000EL) michael@0: #define E_INVALIDARG ((HRESULT)0x80070057L) michael@0: michael@0: #ifdef _MSC_VER michael@0: #define STDMETHODCALLTYPE __stdcall michael@0: #else michael@0: #define STDMETHODCALLTYPE michael@0: #endif michael@0: michael@0: #define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f michael@0: #define STDMETHOD(f) STDMETHOD_(HRESULT, f) michael@0: #define STDMETHODIMP_(type) type STDMETHODCALLTYPE michael@0: #define STDMETHODIMP STDMETHODIMP_(HRESULT) michael@0: michael@0: #define PURE = 0 michael@0: michael@0: #define MIDL_INTERFACE(x) struct michael@0: michael@0: struct IUnknown michael@0: { michael@0: STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE; michael@0: STDMETHOD_(ULONG, AddRef)() PURE; michael@0: STDMETHOD_(ULONG, Release)() PURE; michael@0: }; michael@0: michael@0: typedef IUnknown *LPUNKNOWN; michael@0: michael@0: #define VARIANT_TRUE ((VARIANT_BOOL)-1) michael@0: #define VARIANT_FALSE ((VARIANT_BOOL)0) michael@0: michael@0: enum VARENUM michael@0: { michael@0: VT_EMPTY = 0, michael@0: VT_NULL = 1, michael@0: VT_I2 = 2, michael@0: VT_I4 = 3, michael@0: VT_R4 = 4, michael@0: VT_R8 = 5, michael@0: VT_CY = 6, michael@0: VT_DATE = 7, michael@0: VT_BSTR = 8, michael@0: VT_DISPATCH = 9, michael@0: VT_ERROR = 10, michael@0: VT_BOOL = 11, michael@0: VT_VARIANT = 12, michael@0: VT_UNKNOWN = 13, michael@0: VT_DECIMAL = 14, michael@0: VT_I1 = 16, michael@0: VT_UI1 = 17, michael@0: VT_UI2 = 18, michael@0: VT_UI4 = 19, michael@0: VT_I8 = 20, michael@0: VT_UI8 = 21, michael@0: VT_INT = 22, michael@0: VT_UINT = 23, michael@0: VT_VOID = 24, michael@0: VT_HRESULT = 25, michael@0: VT_FILETIME = 64 michael@0: }; michael@0: michael@0: typedef unsigned short VARTYPE; michael@0: typedef WORD PROPVAR_PAD1; michael@0: typedef WORD PROPVAR_PAD2; michael@0: typedef WORD PROPVAR_PAD3; michael@0: michael@0: typedef struct tagPROPVARIANT michael@0: { michael@0: VARTYPE vt; michael@0: PROPVAR_PAD1 wReserved1; michael@0: PROPVAR_PAD2 wReserved2; michael@0: PROPVAR_PAD3 wReserved3; michael@0: union michael@0: { michael@0: CHAR cVal; michael@0: UCHAR bVal; michael@0: SHORT iVal; michael@0: USHORT uiVal; michael@0: LONG lVal; michael@0: ULONG ulVal; michael@0: INT intVal; michael@0: UINT uintVal; michael@0: LARGE_INTEGER hVal; michael@0: ULARGE_INTEGER uhVal; michael@0: VARIANT_BOOL boolVal; michael@0: SCODE scode; michael@0: FILETIME filetime; michael@0: BSTR bstrVal; michael@0: }; michael@0: } PROPVARIANT; michael@0: michael@0: typedef PROPVARIANT tagVARIANT; michael@0: typedef tagVARIANT VARIANT; michael@0: typedef VARIANT VARIANTARG; michael@0: michael@0: MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len); michael@0: MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz); michael@0: MY_EXTERN_C void SysFreeString(BSTR bstr); michael@0: MY_EXTERN_C UINT SysStringByteLen(BSTR bstr); michael@0: MY_EXTERN_C UINT SysStringLen(BSTR bstr); michael@0: michael@0: MY_EXTERN_C DWORD GetLastError(); michael@0: MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop); michael@0: MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src); michael@0: MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2); michael@0: michael@0: #define CP_ACP 0 michael@0: #define CP_OEMCP 1 michael@0: michael@0: typedef enum tagSTREAM_SEEK michael@0: { michael@0: STREAM_SEEK_SET = 0, michael@0: STREAM_SEEK_CUR = 1, michael@0: STREAM_SEEK_END = 2 michael@0: } STREAM_SEEK; michael@0: michael@0: #endif michael@0: #endif