windows-nt/Source/XPSP1/NT/com/ole32/stg/ref/h/ref.hxx

326 lines
9.7 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996.
//
// File: ref.hxx
//
// Contents: Reference implementation headers
//
//----------------------------------------------------------------------------
#ifndef __REF_HXX__
#define __REF_HXX__
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#ifdef _WIN32
#include <malloc.h>
#include <crtdbg.h>
#endif
#define FARSTRUCT
#define interface struct
#define DECLARE_INTERFACE(iface) interface iface
#define DECLARE_INTERFACE_(iface, baseiface) interface iface: public baseiface
typedef long SCODE;
typedef long HRESULT;
#define NOERROR 0
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif
#define PURE = 0
#ifdef _MSC_VER
#define STDCALL __stdcall
#define STDMETHODCALLTYPE __stdcall
#define EXPORTDLL _declspec(dllexport)
#else // _MSC_VER
#define STDCALL
#define EXPORTDLL
#define STDMETHODCALLTYPE
#endif // _MSC_VER
#define STDMETHODIMP HRESULT STDCALL
#define STDMETHODIMP_(type) type STDCALL
#define STDMETHOD(method) virtual HRESULT STDCALL method
#define STDMETHOD_(type, method) virtual type STDCALL method
#define STDAPI HRESULT EXPORTDLL STDCALL
#define STDAPICALLTYPE STDCALL
#define STDAPI_(type) type EXPORTDLL STDCALL
#define THIS_
#define THIS void
#define FAR
typedef int BOOL, *LPBOOL;
typedef BOOL BOOLEAN;
typedef unsigned char BYTE;
typedef char CHAR, *PCHAR;
typedef unsigned char UCHAR;
typedef unsigned short WORD;
typedef unsigned int UINT;
typedef int INT;
typedef long LONG;
typedef unsigned long DWORD;
typedef short SHORT;
typedef unsigned short USHORT;
typedef DWORD ULONG;
typedef void VOID;
typedef WORD WCHAR;
typedef LONG NTSTATUS, *PNTSTATUS;
// NOTE:
// for other compilers some form of 64 bit integer support
// has to be provided
#ifdef __GNUC__
typedef long long int LONGLONG;
typedef unsigned long long int ULONGLONG;
#endif
#ifdef _MSC_VER
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
#endif
typedef void *LPVOID;
typedef char *LPSTR;
typedef const char *LPCSTR;
#define TRUE 1
#define FALSE 0
#ifndef _WIN32 // stuff declared in Windows but not in Unix
#define _HEAP_MAXREQ 0xFFFFFFE0
#define _MAX_PATH 1024
#endif // _WIN32
const ULONG MAX_ULONG = 0xFFFFFFFF;
const USHORT USHRT_MAX = 0xFFFF;
#define MAXULONG MAX_ULONG
#define MAX_PATH _MAX_PATH
typedef struct _ULARGE_INTEGER {
DWORD LowPart;
DWORD HighPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
#define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
typedef struct _LARGE_INTEGER {
DWORD LowPart;
LONG HighPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
#define LISet32(li, v) ((li).HighPart = ((LONG)(v)) < 0 ? -1 : 0, (li).LowPart = (v))
typedef struct tagGUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
typedef GUID CLSID;
typedef GUID IID;
#define REFGUID const GUID &
#define REFIID const IID &
#define REFCLSID const CLSID &
DECLARE_INTERFACE(IUnknown)
{
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
};
#include "storage.h"
#define S_OK 0L
#define MAKE_SCODE(sev,fac,code) \
((SCODE) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | \
((unsigned long)(code))) )
#define SEVERITY_SUCCESS 0
#define SEVERITY_ERROR 1
#define FACILITY_STORAGE 0x0003 // storage errors (STG_E_*)
#define FACILITY_WIN32 0x0007
#define FACILITY_NULL 0x0000
#define FACILITY_NT_BIT 0x10000000
#define HRESULT_FROM_WIN32(x) \
(x ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) \
| 0x80000000)) : 0 )
#define WIN32_SCODE(err) HRESULT_FROM_WIN32(err)
#define HRESULT_FROM_NT(x) ((HRESULT) ((x) | FACILITY_NT_BIT))
#define S_TRUE 0L
#define S_FALSE MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_NULL, 1)
#define E_OUTOFMEMORY MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 2)
#define E_INVALIDARG MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 3)
#define E_NOINTERFACE MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 4)
#define E_FAIL MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 8)
#define ERROR_DIR_NOT_EMPTY 145L
#define ERROR_NO_UNICODE_TRANSLATION 1113L
#define SUCCEEDED(Status) ((SCODE)(Status) >= 0)
#define FAILED(Status) ((SCODE)(Status)<0)
//#define GetScode(hr) ((SCODE)(hr) & 0x800FFFFF)
//#define ResultFromScode(sc) ((HRESULT)((SCODE)(sc) & 0x800FFFFF))
#define ResultFromScode(sc) ((HRESULT) (sc))
#define GetScode(hr) ((SCODE) (hr))
/************** GUID's **************************************************/
/* if INITGUID is defined, initialize the GUID, else declare it as extern
NOTE: every EXE/DLL needs to initialize at least (and preferrably) once */
#ifndef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID name
#else
#define 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 } }
#endif /* INITGUID */
#define DEFINE_OLEGUID(name, l, w1, w2) \
DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
DEFINE_GUID(GUID_NULL, 0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
/* storage related interfaces */
DEFINE_OLEGUID(IID_IUnknown, 0x00000000L, 0, 0);
DEFINE_OLEGUID(IID_IMalloc, 0x00000002L, 0, 0);
DEFINE_OLEGUID(IID_IRootStorage, 0x00000012L, 0, 0);
DEFINE_OLEGUID(IID_IDfReserved1, 0x00000013L, 0, 0);
DEFINE_OLEGUID(IID_IDfReserved2, 0x00000014L, 0, 0);
DEFINE_OLEGUID(IID_IDfReserved3, 0x00000015L, 0, 0);
DEFINE_OLEGUID(IID_ILockBytes, 0x0000000aL, 0, 0);
DEFINE_OLEGUID(IID_IStorage, 0x0000000bL, 0, 0);
DEFINE_OLEGUID(IID_IStream, 0x0000000cL, 0, 0);
DEFINE_OLEGUID(IID_IEnumSTATSTG, 0x0000000dL, 0, 0);
DEFINE_OLEGUID(IID_IPropertyStorage, 0x00000138L, 0, 0);
DEFINE_OLEGUID(IID_IEnumSTATPROPSTG, 0x00000139L, 0, 0);
DEFINE_OLEGUID(IID_IPropertySetStorage, 0x0000013AL, 0, 0);
DEFINE_OLEGUID(IID_IEnumSTATPROPSETSTG, 0x0000013BL, 0, 0);
/* The FMTID of the "SummaryInformation" property set. */
DEFINE_GUID( FMTID_SummaryInformation,
0xf29f85e0, 0x4ff9, 0x1068,
0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9 );
/* The FMTID of the first Section of the "DocumentSummaryInformation" property
set. */
DEFINE_GUID( FMTID_DocSummaryInformation,
0xd5cdd502, 0x2e9c, 0x101b,
0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae );
/* The FMTID of the section Section of the "DocumentSummaryInformation"
property set. */
DEFINE_GUID( FMTID_UserDefinedProperties,
0xd5cdd505, 0x2e9c, 0x101b,
0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae );
#define FMTID_NULL GUID_NULL
/* Comparing GUIDs */
EXTERN_C STDAPI_(BOOL) IsEqualGUID(REFGUID rguid1, REFGUID rguid2);
#define IsEqualIID(x, y) IsEqualGUID(x, y)
#define IsEqualCLSID(x, y) IsEqualGUID(x, y)
#define IID_NULL GUID_NULL
#define CLSID_NULL GUID_NULL
// Use these to 'refer' to the formal parameters that we are not using
#define UNIMPLEMENTED_PARM(x) (x)
#define UNREFERENCED_PARM(x) (x)
/************** Debugging Stuff *******************************************/
#define DEB_ERROR 0x00000001 // exported error paths
#define DEB_TRACE 0x00000004 // exported trace messages
#define DEB_PROP_MAP DEB_ITRACE // 0x00000400
#define DEB_IERROR 0x00000100 // internal error paths
#define DEB_ITRACE 0x00000400 // internal trace messages
#define DEB_ALL 0xFFFFFFFF // all traces on
#if DBG == 1
//
// GCC versions 2.6.x (and below) has problems with inlined
// variable argument macros, so we have to use non-inlined
// functions for debugging.
// Luckily DECLARE_INFOLEVEL is always used in a .c or .cxx file
// so we can shift the function body around.
//
#if (__GNUC__ == 2 && __GNUC_MINOR__ <= 6)
#define DECLARE_DEBUG(comp) \
EXTERN_C unsigned long comp##InfoLevel; \
EXTERN_C char *comp##InfoLevelString; \
void comp##InlineDebugOut(unsigned long fDebugMask, char const *pszfmt, ...);
#define DECLARE_INFOLEVEL(comp, level) \
unsigned long comp##InfoLevel = level; \
char *comp##InfoLevelString = #comp; \
\
void \
comp##InlineDebugOut(unsigned long fDebugMask, char const *pszfmt, ...) \
{ \
va_list vstart; \
va_start(vstart, pszfmt); \
if (comp##InfoLevel & fDebugMask) \
{ \
vprintf((const char *)pszfmt, vstart); \
} \
}
#else // (__GNUC__ > 2 && __GNUC_MINOR__ <= 6)
#define DECLARE_DEBUG(comp) \
EXTERN_C unsigned long comp##InfoLevel; \
EXTERN_C char *comp##InfoLevelString; \
inline void \
comp##InlineDebugOut(unsigned long fDebugMask, char const *pszfmt, ...) \
{ \
va_list vstart; \
va_start(vstart, pszfmt); \
if (comp##InfoLevel & fDebugMask) \
{ \
vprintf((const char *)pszfmt, vstart); \
} \
}
#define DECLARE_INFOLEVEL(comp, level) \
unsigned long comp##InfoLevel = level; \
char *comp##InfoLevelString = #comp;
#endif // (__GNUC__ > 2 && __GNUC_MINOR__ <= 6)
#else // DBG
#define DECLARE_DEBUG(comp)
#define DECLARE_INFOLEVEL(comp, level)
#endif // DBG
#endif // #ifndef __REF_HXX__