|
|
/* FILE: prop.h*/
/* Description: This is the exported include file that should be */ /* included to declare and make use of the property */ /* set Interfaces (IPropertyStorage and IPropertySetStorage */
#ifndef _PROP_H_
#define _PROP_H_
#include "ref.hxx"
#include "tchar.h"
#include "../props/olechar.h"
typedef double DATE;
typedef union tagCY { struct _split { #if BIGENDIAN /* big end in first */
long Hi; unsigned long Lo; #else /* little end in first */
unsigned long Lo; long Hi; #endif
} split; /* need to name this to make it portable */ LONGLONG int64; /* the above split is need to be compatiable */ /* with the def of the union */ } CY;
typedef OLECHAR *BSTR; typedef BSTR *LPBSTR; /* 0 == FALSE, -1 == TRUE */
typedef short VARIANT_BOOL;
/* for backward compatibility */ typedef VARIANT_BOOL _VARIANT_BOOL; #define VARIANT_TRUE ((VARIANT_BOOL)0xffff)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
typedef struct tagBLOB { ULONG cbSize; BYTE *pBlobData; } BLOB; typedef struct tagBLOB *LPBLOB;
typedef unsigned short VARTYPE;
typedef struct tagCLIPDATA { ULONG cbSize; // includes sizeof(ulClipFmt)
long ulClipFmt; BYTE *pClipData; } CLIPDATA;
/*
* VARENUM usage key, * * * [V] - may appear in a VARIANT * * [T] - may appear in a TYPEDESC * * [P] - may appear in an OLE property set * * [S] - may appear in a Safe Array * * * VT_EMPTY [V] [P] nothing * VT_NULL [V] [P] SQL style Null * VT_I2 [V][T][P][S] 2 byte signed int * VT_I4 [V][T][P][S] 4 byte signed int * VT_R4 [V][T][P][S] 4 byte real * VT_R8 [V][T][P][S] 8 byte real * VT_CY [V][T][P][S] currency * VT_DATE [V][T][P][S] date * VT_BSTR [V][T][P][S] OLE Automation string * VT_DISPATCH [V][T][P][S] IDispatch * * VT_ERROR [V][T][P][S] SCODE * VT_BOOL [V][T][P][S] True=-1, False=0 * VT_VARIANT [V][T][P][S] VARIANT * * VT_UNKNOWN [V][T] [S] IUnknown * * VT_DECIMAL [V][T] [S] 16 byte fixed point * VT_I1 [T] signed char * VT_UI1 [V][T][P][S] unsigned char * VT_UI2 [T][P] unsigned short * VT_UI4 [T][P] unsigned short * VT_I8 [T][P] signed 64-bit int * VT_UI8 [T][P] unsigned 64-bit int * VT_INT [T] signed machine int * VT_UINT [T] unsigned machine int * VT_VOID [T] C style void * VT_HRESULT [T] Standard return type * VT_PTR [T] pointer type * VT_SAFEARRAY [T] (use VT_ARRAY in VARIANT) * VT_CARRAY [T] C style array * VT_USERDEFINED [T] user defined type * VT_LPSTR [T][P] null terminated string * VT_LPWSTR [T][P] wide null terminated string * VT_FILETIME [P] FILETIME * VT_BLOB [P] Length prefixed bytes * VT_STREAM [P] Name of the stream follows * VT_STORAGE [P] Name of the storage follows * VT_STREAMED_OBJECT [P] Stream contains an object * VT_STORED_OBJECT [P] Storage contains an object * VT_BLOB_OBJECT [P] Blob contains an object * VT_CF [P] Clipboard format * VT_CLSID [P] A Class ID * VT_VECTOR [P] simple counted array * VT_ARRAY [V] SAFEARRAY* * VT_BYREF [V] void* for local use */
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_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0xfff, VT_TYPEMASK = 0xfff }; typedef ULONG PROPID;
/* Macro to calculate the size of the above pClipData */ #define CBPCLIPDATA(clipdata) \
( (clipdata).cbSize - sizeof((clipdata).ulClipFmt) )
typedef GUID FMTID; typedef const FMTID& REFFMTID;
/* Well-known Property Set Format IDs*/ extern const FMTID FMTID_SummaryInformation; extern const FMTID FMTID_DocSummaryInformation; extern const FMTID FMTID_UserDefinedProperties;
inline BOOL operator==(REFFMTID g1, REFFMTID g2) { return IsEqualGUID(g1, g2); } inline BOOL operator!=(REFFMTID g1, REFFMTID g2) { return !IsEqualGUID(g1, g2); }
/* Flags for IPropertySetStorage::Create*/ #define PROPSETFLAG_DEFAULT ( 0 )
#define PROPSETFLAG_NONSIMPLE ( 1 )
#define PROPSETFLAG_ANSI ( 2 )
/* FORWARD REFERENCES */ interface IPropertyStorage; interface IEnumSTATPROPSTG; interface IEnumSTATPROPSETSTG;
typedef IPropertyStorage *LPPROPERTYSTORAGE;
typedef struct tagPROPVARIANT PROPVARIANT;
typedef struct tagCAUB { ULONG cElems; unsigned char *pElems; } CAUB;
typedef struct tagCAI { ULONG cElems; short *pElems; } CAI;
typedef struct tagCAUI { ULONG cElems; USHORT *pElems; } CAUI;
typedef struct tagCAL { ULONG cElems; long *pElems; } CAL;
typedef struct tagCAUL { ULONG cElems; ULONG *pElems; } CAUL;
typedef struct tagCAFLT { ULONG cElems; float *pElems; } CAFLT;
typedef struct tagCADBL { ULONG cElems; double *pElems; } CADBL;
typedef struct tagCACY { ULONG cElems; CY *pElems; } CACY; typedef struct tagCADATE { ULONG cElems; DATE *pElems; } CADATE;
typedef struct tagCABSTR { ULONG cElems; BSTR *pElems; } CABSTR;
typedef struct tagCABOOL { ULONG cElems; VARIANT_BOOL *pElems; } CABOOL;
typedef struct tagCASCODE { ULONG cElems; SCODE *pElems; } CASCODE;
typedef struct tagCAPROPVARIANT { ULONG cElems; PROPVARIANT *pElems; } CAPROPVARIANT;
typedef struct tagCAH { ULONG cElems; LARGE_INTEGER *pElems; } CAH;
typedef struct tagCAUH { ULONG cElems; ULARGE_INTEGER *pElems; } CAUH;
typedef struct tagCALPSTR { ULONG cElems; LPSTR *pElems; } CALPSTR;
typedef struct tagCALPWSTR { ULONG cElems; LPWSTR *pElems; } CALPWSTR;
typedef struct tagCAFILETIME { ULONG cElems; FILETIME *pElems; } CAFILETIME;
typedef struct tagCACLIPDATA { ULONG cElems; CLIPDATA *pElems; } CACLIPDATA;
typedef struct tagCACLSID { ULONG cElems; CLSID *pElems; } CACLSID;
/* Disable the warning about the obsolete member named 'bool'*/ /* 'bool', 'true', 'false', 'mutable', 'explicit', & 'typename'*/ /* are reserved keywords*/ #ifdef _MSC_VER
#pragma warning(disable:4237)
#endif
struct tagPROPVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union { UCHAR bVal; short iVal; USHORT uiVal; VARIANT_BOOL boolVal; long lVal; ULONG ulVal; float fltVal; SCODE scode; LARGE_INTEGER hVal; ULARGE_INTEGER uhVal; double dblVal; CY cyVal; DATE date; FILETIME filetime; CLSID *puuid; BLOB blob; CLIPDATA *pclipdata; IStream *pStream; IStorage *pStorage; BSTR bstrVal; LPSTR pszVal; LPWSTR pwszVal; CAUB caub; CAI cai; CAUI caui; CABOOL cabool; CAL cal; CAUL caul; CAFLT caflt; CASCODE cascode; CAH cah; CAUH cauh; CADBL cadbl; CACY cacy; CADATE cadate; CAFILETIME cafiletime; CACLSID cauuid; CACLIPDATA caclipdata; CABSTR cabstr; CALPSTR calpstr; CALPWSTR calpwstr; CAPROPVARIANT capropvar; }; }; typedef struct tagPROPVARIANT *LPPROPVARIANT;
/* Reserved global Property IDs */ #define PID_DICTIONARY ( 0 )
#define PID_CODEPAGE ( 0x1 )
#define PID_FIRST_USABLE ( 0x2 )
#define PID_FIRST_NAME_DEFAULT ( 0xfff )
#define PID_LOCALE ( 0x80000000 )
#define PID_MODIFY_TIME ( 0x80000001 )
#define PID_SECURITY ( 0x80000002 )
#define PID_ILLEGAL ( 0xffffffff )
/* Property IDs for the SummaryInformation Property Set */
#define PIDSI_TITLE 0x00000002L /* VT_LPSTR*/
#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR*/
#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR*/
#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR*/
#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR*/
#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR*/
#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR*/
#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR*/
#define PIDSI_EDITTIME 0x0000000aL /* VT_FILETIME (UTC)*/
#define PIDSI_LASTPRINTED 0x0000000bL /* VT_FILETIME (UTC)*/
#define PIDSI_CREATE_DTM 0x0000000cL /* VT_FILETIME (UTC)*/
#define PIDSI_LASTSAVE_DTM 0x0000000dL /* VT_FILETIME (UTC)*/
#define PIDSI_PAGECOUNT 0x0000000eL /* VT_I4*/
#define PIDSI_WORDCOUNT 0x0000000fL /* VT_I4*/
#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4*/
#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF*/
#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR*/
#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4*/
#define PRSPEC_INVALID ( 0xffffffff )
#define PRSPEC_LPWSTR ( 0 )
#define PRSPEC_PROPID ( 1 )
typedef struct tagPROPSPEC { ULONG ulKind; union { PROPID propid; LPOLESTR lpwstr; }; } PROPSPEC;
typedef struct tagSTATPROPSTG { LPOLESTR lpwstrName; PROPID propid; VARTYPE vt; } STATPROPSTG;
inline WORD OSVERHI(DWORD dwOSVer) { return (WORD) (dwOSVer >> 16); } inline WORD OSVERLOW(DWORD dwOSVer) { return (WORD) (dwOSVer & ((unsigned)~((DWORD) 0) >> 16)); }
#ifndef LOBYTE
/* code from MSDN */ #define LOBYTE(a) (BYTE) ((a) & ((unsigned)~0>>CHAR_BIT))
#define HIBYTE(a) (BYTE) ((unsigned)(a) >> CHAR_BIT)
#endif
/* Macros for parsing the OS Version of the Property Set Header*/ #define PROPSETHDR_OSVER_KIND(dwOSVer) OSVERHI( (dwOSVer) )
#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE( OSVERLOW( (dwOSVer) ))
#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE( OSVERLOW( (dwOSVer) ))
#define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF
typedef struct tagSTATPROPSETSTG { FMTID fmtid; CLSID clsid; DWORD grfFlags; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD dwOSVersion; } STATPROPSETSTG;
EXTERN_C const IID IID_IPropertyStorage;
/****************************************************************
* * Header for interface: IPropertyStorage * ****************************************************************/
interface IPropertyStorage : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE ReadMultiple( /* [in] */ ULONG cpspec, /* [in] */ const PROPSPEC rgpspec[ ], /* [out] */ PROPVARIANT rgpropvar[ ]) = 0; virtual HRESULT STDMETHODCALLTYPE WriteMultiple( /* [in] */ ULONG cpspec, /* [in] */ const PROPSPEC rgpspec[ ], /* [in] */ const PROPVARIANT rgpropvar[ ], /* [in] */ PROPID propidNameFirst) = 0; virtual HRESULT STDMETHODCALLTYPE DeleteMultiple( /* [in] */ ULONG cpspec, /* [in] */ const PROPSPEC rgpspec[ ]) = 0; virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames( /* [in] */ ULONG cpropid, /* [in] */ const PROPID rgpropid[ ], /* [out] */ LPOLESTR rglpwstrName[ ]) = 0; virtual HRESULT STDMETHODCALLTYPE WritePropertyNames( /* [in] */ ULONG cpropid, /* [in] */ const PROPID rgpropid[ ], /* [in] */ const LPOLESTR rglpwstrName[ ]) = 0; virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames( /* [in] */ ULONG cpropid, /* [in] */ const PROPID rgpropid[ ]) = 0; virtual HRESULT STDMETHODCALLTYPE Commit( /* [in] */ DWORD grfCommitFlags) = 0; virtual HRESULT STDMETHODCALLTYPE Revert( void) = 0; virtual HRESULT STDMETHODCALLTYPE Enum( /* [out] */ IEnumSTATPROPSTG **ppenum) = 0; virtual HRESULT STDMETHODCALLTYPE SetTimes( /* [in] */ const FILETIME *pctime, /* [in] */ const FILETIME *patime, /* [in] */ const FILETIME *pmtime) = 0; virtual HRESULT STDMETHODCALLTYPE SetClass( /* [in] */ REFCLSID clsid) = 0; virtual HRESULT STDMETHODCALLTYPE Stat( /* [out] */ STATPROPSETSTG *pstatpsstg) = 0; };
/****************************************************************
* * Header for interface: IPropertySetStorage * ****************************************************************/
EXTERN_C const IID IID_IPropertySetStorage;
interface IPropertySetStorage : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE Create( /* [in] */ REFFMTID rfmtid, /* [in] */ const CLSID *pclsid, /* [in] */ DWORD grfFlags, /* [in] */ DWORD grfMode, /* [out] */ IPropertyStorage **ppprstg) = 0; virtual HRESULT STDMETHODCALLTYPE Open( /* [in] */ REFFMTID rfmtid, /* [in] */ DWORD grfMode, /* [out] */ IPropertyStorage **ppprstg) = 0; virtual HRESULT STDMETHODCALLTYPE Delete( /* [in] */ REFFMTID rfmtid) = 0; virtual HRESULT STDMETHODCALLTYPE Enum( /* [out] */ IEnumSTATPROPSETSTG **ppenum) = 0; };
typedef IPropertySetStorage *LPPROPERTYSETSTORAGE;
/****************************************************************
* * Header for interface: IEnumSTATPROPSTG * ****************************************************************/
typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG; EXTERN_C const IID IID_IEnumSTATPROPSTG;
interface IEnumSTATPROPSTG : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE Next( /* [in] */ ULONG celt, /* [out] */ STATPROPSTG *rgelt, /* [out] */ ULONG *pceltFetched) = 0; virtual HRESULT STDMETHODCALLTYPE Skip( /* [in] */ ULONG celt) = 0; virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; virtual HRESULT STDMETHODCALLTYPE Clone( /* [out] */ IEnumSTATPROPSTG **ppenum) = 0; };
typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
EXTERN_C const IID IID_IEnumSTATPROPSETSTG;
/****************************************************************
* * Header for interface: IEnumSTATPROPSETSTG * ****************************************************************/
interface IEnumSTATPROPSETSTG : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE Next( /* [in] */ ULONG celt, /* [out] */ STATPROPSETSTG *rgelt, /* [out] */ ULONG *pceltFetched) = 0; virtual HRESULT STDMETHODCALLTYPE Skip( /* [in] */ ULONG celt) = 0; virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; virtual HRESULT STDMETHODCALLTYPE Clone( /* [out] */ IEnumSTATPROPSETSTG **ppenum) = 0; };
#ifdef __cplusplus
extern "C" { #endif
STDAPI PropVariantCopy( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc ); STDAPI PropVariantClear( PROPVARIANT * pvar );
STDAPI FreePropVariantArray( ULONG cVariants, PROPVARIANT * rgvars );
STDAPI_(void) SysFreeString(BSTR bstr); STDAPI_(BSTR) SysAllocString(LPOLECHAR pwsz);
#ifdef __cplusplus
}; #endif
#include <memory.h>
#ifdef __cplusplus
inline void PropVariantInit ( PROPVARIANT * pvar ) { memset ( pvar, 0, sizeof(PROPVARIANT) ); } #else
#define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )
#endif
#endif /*#ifndef _PROP_H_*/
|