| // MyWindows.h |
| |
| #ifdef Z7_DEFINE_GUID |
| #undef Z7_DEFINE_GUID |
| #endif |
| |
| #ifdef INITGUID |
| #define Z7_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ |
| EXTERN_C const GUID name; \ |
| EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } |
| #else |
| #define Z7_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ |
| EXTERN_C const GUID name |
| #endif |
| |
| |
| #ifndef ZIP7_INC_MY_WINDOWS_H |
| #define ZIP7_INC_MY_WINDOWS_H |
| |
| #ifdef _WIN32 |
| |
| #include "../../C/7zWindows.h" |
| |
| #else // _WIN32 |
| |
| #include <stddef.h> // for wchar_t |
| #include <string.h> |
| // #include <stdint.h> // for uintptr_t |
| |
| #include "../../C/7zTypes.h" |
| #include "MyGuidDef.h" |
| |
| // WINAPI is __stdcall in Windows-MSVC in windef.h |
| #define WINAPI |
| |
| typedef char CHAR; |
| typedef unsigned char UCHAR; |
| |
| #undef BYTE |
| typedef unsigned char BYTE; |
| |
| typedef short SHORT; |
| typedef unsigned short USHORT; |
| |
| #undef WORD |
| typedef unsigned short WORD; |
| typedef short VARIANT_BOOL; |
| |
| #define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff)) |
| #define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16)) |
| |
| // MS uses long for BOOL, but long is 32-bit in MS. So we use int. |
| // typedef long BOOL; |
| typedef int BOOL; |
| |
| #ifndef FALSE |
| #define FALSE 0 |
| #define TRUE 1 |
| #endif |
| |
| // typedef size_t ULONG_PTR; |
| // typedef size_t DWORD_PTR; |
| // typedef uintptr_t UINT_PTR; |
| // typedef ptrdiff_t UINT_PTR; |
| |
| typedef Int64 LONGLONG; |
| typedef UInt64 ULONGLONG; |
| |
| typedef struct { LONGLONG QuadPart; } LARGE_INTEGER; |
| typedef struct { ULONGLONG QuadPart; } ULARGE_INTEGER; |
| |
| typedef const CHAR *LPCSTR; |
| typedef CHAR TCHAR; |
| typedef const TCHAR *LPCTSTR; |
| typedef wchar_t WCHAR; |
| typedef WCHAR OLECHAR; |
| typedef const WCHAR *LPCWSTR; |
| typedef OLECHAR *BSTR; |
| typedef const OLECHAR *LPCOLESTR; |
| typedef OLECHAR *LPOLESTR; |
| |
| typedef struct |
| { |
| DWORD dwLowDateTime; |
| DWORD dwHighDateTime; |
| } FILETIME; |
| |
| #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) |
| #define FAILED(hr) ((HRESULT)(hr) < 0) |
| typedef ULONG PROPID; |
| typedef LONG SCODE; |
| |
| |
| #define S_OK ((HRESULT)0x00000000L) |
| #define S_FALSE ((HRESULT)0x00000001L) |
| #define E_NOTIMPL ((HRESULT)0x80004001L) |
| #define E_NOINTERFACE ((HRESULT)0x80004002L) |
| #define E_ABORT ((HRESULT)0x80004004L) |
| #define E_FAIL ((HRESULT)0x80004005L) |
| #define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L) |
| #define CLASS_E_CLASSNOTAVAILABLE ((HRESULT)0x80040111L) |
| |
| |
| #ifdef _MSC_VER |
| #define STDMETHODCALLTYPE __stdcall |
| #define STDAPICALLTYPE __stdcall |
| #else |
| // do we need __export here? |
| #define STDMETHODCALLTYPE |
| #define STDAPICALLTYPE |
| #endif |
| |
| #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE |
| |
| #ifndef DECLSPEC_NOTHROW |
| #define DECLSPEC_NOTHROW Z7_DECLSPEC_NOTHROW |
| #endif |
| |
| #ifndef DECLSPEC_NOVTABLE |
| #define DECLSPEC_NOVTABLE Z7_DECLSPEC_NOVTABLE |
| #endif |
| |
| #ifndef COM_DECLSPEC_NOTHROW |
| #ifdef COM_STDMETHOD_CAN_THROW |
| #define COM_DECLSPEC_NOTHROW |
| #else |
| #define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW |
| #endif |
| #endif |
| |
| #define DECLARE_INTERFACE(iface) struct DECLSPEC_NOVTABLE iface |
| #define DECLARE_INTERFACE_(iface, baseiface) struct DECLSPEC_NOVTABLE iface : public baseiface |
| |
| #define STDMETHOD_(t, f) virtual COM_DECLSPEC_NOTHROW t STDMETHODCALLTYPE f |
| #define STDMETHOD(f) STDMETHOD_(HRESULT, f) |
| #define STDMETHODIMP_(t) COM_DECLSPEC_NOTHROW t STDMETHODCALLTYPE |
| #define STDMETHODIMP STDMETHODIMP_(HRESULT) |
| |
| |
| #define PURE = 0 |
| |
| // #define MIDL_INTERFACE(x) struct |
| |
| |
| #ifdef __cplusplus |
| |
| /* |
| p7zip and 7-Zip before v23 used virtual destructor in IUnknown, |
| if _WIN32 is not defined. |
| It used virtual destructor, because some compilers don't like virtual |
| interfaces without virtual destructor. |
| IUnknown in Windows (_WIN32) doesn't use virtual destructor in IUnknown. |
| We still can define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN here, |
| if we want to be compatible with old plugin interface of p7zip and 7-Zip before v23. |
| |
| v23: |
| In new 7-Zip v23 we try to be more compatible with original IUnknown from _WIN32. |
| So we do not define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN here, |
| */ |
| // #define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN |
| |
| #ifdef Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN |
| #if defined(__clang__) |
| #pragma GCC diagnostic ignored "-Winconsistent-missing-destructor-override" |
| #endif |
| #endif |
| |
| Z7_PURE_INTERFACES_BEGIN |
| |
| DEFINE_GUID(IID_IUnknown, |
| 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); |
| struct IUnknown |
| { |
| STDMETHOD(QueryInterface) (REFIID iid, void **outObject) =0; |
| STDMETHOD_(ULONG, AddRef)() =0; |
| STDMETHOD_(ULONG, Release)() =0; |
| #ifdef Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN |
| virtual ~IUnknown() {} |
| #endif |
| }; |
| |
| typedef IUnknown *LPUNKNOWN; |
| |
| Z7_PURE_INTERFACES_END |
| |
| #endif // __cplusplus |
| |
| #define VARIANT_TRUE ((VARIANT_BOOL)-1) |
| #define VARIANT_FALSE ((VARIANT_BOOL)0) |
| |
| enum VARENUM |
| { |
| VT_EMPTY = 0, |
| VT_NULL = 1, |
| VT_I2 = 2, |
| VT_I4 = 3, |
| VT_R4 = 4, |
| VT_R8 = 5, |
| VT_CY = 6, |
| VT_DATE = 7, |
| VT_BSTR = 8, |
| VT_DISPATCH = 9, |
| VT_ERROR = 10, |
| VT_BOOL = 11, |
| VT_VARIANT = 12, |
| VT_UNKNOWN = 13, |
| VT_DECIMAL = 14, |
| |
| VT_I1 = 16, |
| VT_UI1 = 17, |
| VT_UI2 = 18, |
| VT_UI4 = 19, |
| VT_I8 = 20, |
| VT_UI8 = 21, |
| VT_INT = 22, |
| VT_UINT = 23, |
| VT_VOID = 24, |
| VT_HRESULT = 25, |
| VT_FILETIME = 64 |
| }; |
| |
| typedef unsigned short VARTYPE; |
| typedef WORD PROPVAR_PAD1; |
| typedef WORD PROPVAR_PAD2; |
| typedef WORD PROPVAR_PAD3; |
| |
| typedef struct tagPROPVARIANT |
| { |
| VARTYPE vt; |
| PROPVAR_PAD1 wReserved1; |
| PROPVAR_PAD2 wReserved2; |
| PROPVAR_PAD3 wReserved3; |
| union |
| { |
| CHAR cVal; |
| UCHAR bVal; |
| SHORT iVal; |
| USHORT uiVal; |
| LONG lVal; |
| ULONG ulVal; |
| INT intVal; |
| UINT uintVal; |
| LARGE_INTEGER hVal; |
| ULARGE_INTEGER uhVal; |
| VARIANT_BOOL boolVal; |
| SCODE scode; |
| FILETIME filetime; |
| BSTR bstrVal; |
| }; |
| } PROPVARIANT; |
| |
| typedef PROPVARIANT tagVARIANT; |
| typedef tagVARIANT VARIANT; |
| typedef VARIANT VARIANTARG; |
| |
| EXTERN_C HRESULT VariantClear(VARIANTARG *prop); |
| EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, const VARIANTARG *src); |
| |
| typedef struct tagSTATPROPSTG |
| { |
| LPOLESTR lpwstrName; |
| PROPID propid; |
| VARTYPE vt; |
| } STATPROPSTG; |
| |
| EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len); |
| EXTERN_C BSTR SysAllocStringLen(const OLECHAR *sz, UINT len); |
| EXTERN_C BSTR SysAllocString(const OLECHAR *sz); |
| EXTERN_C void SysFreeString(BSTR bstr); |
| EXTERN_C UINT SysStringByteLen(BSTR bstr); |
| EXTERN_C UINT SysStringLen(BSTR bstr); |
| |
| EXTERN_C DWORD GetLastError(); |
| EXTERN_C void SetLastError(DWORD dwCode); |
| EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2); |
| |
| EXTERN_C DWORD GetCurrentThreadId(); |
| EXTERN_C DWORD GetCurrentProcessId(); |
| |
| #define MAX_PATH 1024 |
| |
| #define CP_ACP 0 |
| #define CP_OEMCP 1 |
| #define CP_UTF8 65001 |
| |
| typedef enum tagSTREAM_SEEK |
| { |
| STREAM_SEEK_SET = 0, |
| STREAM_SEEK_CUR = 1, |
| STREAM_SEEK_END = 2 |
| } STREAM_SEEK; |
| |
| |
| |
| typedef struct |
| { |
| WORD wYear; |
| WORD wMonth; |
| WORD wDayOfWeek; |
| WORD wDay; |
| WORD wHour; |
| WORD wMinute; |
| WORD wSecond; |
| WORD wMilliseconds; |
| } SYSTEMTIME; |
| |
| BOOL WINAPI FileTimeToLocalFileTime(const FILETIME *fileTime, FILETIME *localFileTime); |
| BOOL WINAPI LocalFileTimeToFileTime(const FILETIME *localFileTime, FILETIME *fileTime); |
| BOOL WINAPI FileTimeToSystemTime(const FILETIME *fileTime, SYSTEMTIME *systemTime); |
| // VOID WINAPI GetSystemTimeAsFileTime(FILETIME *systemTimeAsFileTime); |
| |
| DWORD GetTickCount(); |
| |
| |
| /* |
| #define CREATE_NEW 1 |
| #define CREATE_ALWAYS 2 |
| #define OPEN_EXISTING 3 |
| #define OPEN_ALWAYS 4 |
| #define TRUNCATE_EXISTING 5 |
| */ |
| |
| #endif // _WIN32 |
| |
| #endif |