325 lines
7.3 KiB
C
325 lines
7.3 KiB
C
// 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 _LARGE_INTEGER { LONGLONG QuadPart; } LARGE_INTEGER;
|
|
typedef struct _ULARGE_INTEGER { 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 _FILETIME
|
|
{
|
|
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 _SYSTEMTIME
|
|
{
|
|
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
|