|
|
#ifndef _PROPSET_H_
#define _PROPSET_H_
// NOTE (scotth): this is a placeholder header so we can
// use this according to the spec \\ole\specs\release\properties.doc
// Don't define if OLE definitions are in place!
#ifndef __IPropertyStorage_INTERFACE_DEFINED__
#define __IPropertyStorage_INTERFACE_DEFINED__
#include <ole2.h>
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */
typedef struct tagPROPVARIANT PROPVARIANT;
#define TYPEDEF_CA(type, name) \
typedef struct tag ## name {\ ULONG cElems;\ type *pElems;\ } name TYPEDEF_CA(unsigned char, CAUI1); TYPEDEF_CA(short, CAI2); TYPEDEF_CA(USHORT, CAUI2); TYPEDEF_CA(long, CAI4); TYPEDEF_CA(ULONG, CAUI4); TYPEDEF_CA(LARGE_INTEGER, CAI8); TYPEDEF_CA(ULARGE_INTEGER,CAUI8); TYPEDEF_CA(float, CAR4); TYPEDEF_CA(double, CAR8); TYPEDEF_CA(CURRENCY, CACY); TYPEDEF_CA(DATE, CADATE); TYPEDEF_CA(BSTR, CABSTR); TYPEDEF_CA(VARIANT_BOOL, CABOOL); TYPEDEF_CA(SCODE, CASCODE); TYPEDEF_CA(FILETIME, CAFILETIME); TYPEDEF_CA(LPSTR, CALPSTR); TYPEDEF_CA(LPWSTR, CALPWSTR); TYPEDEF_CA(CLSID, CACLSID); TYPEDEF_CA(CLIPDATA, CACLIPDATA); TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
typedef struct tagPROPVARIANT{ VARTYPE vt; // value type tag
WORD wReserved1; // padding to achieve 4-byte alignment
WORD wReserved2; WORD wReserved3; union { // none // VT_EMPTY, VT_NULL, VT_ILLEGAL
unsigned char bVal; // VT_UI1
short iVal; // VT_I2
USHORT uiVal; // VT_UI2
long lVal; // VT_I4
ULONG ulVal; // VT_UI4
LARGE_INTEGER hVal; // VT_I8
ULARGE_INTEGER uhVal; // VT_UI8
float fltVal; // VT_R4
double dblVal; // VT_R8
CY cyVal; // VT_CY
DATE date; // VT_DATE
BSTR bstrVal; // VT_BSTR // string in the current Ansi code page
VARIANT_BOOL bool; // VT_BOOL
SCODE scode; // VT_ERROR
FILETIME filetime; // VT_FILETIME
LPSTR pszVal; // VT_LPSTR // string in the current Ansi code page
LPWSTR pwszVal; // VT_LPWSTR // string in Unicode
CLSID* puuid; // VT_CLSID
CLIPDATA* pclipdata; // VT_CF
BLOB blob; // VT_BLOB, VT_BLOBOBJECT
IStream* pStream; // VT_STREAM, VT_STREAMED_OBJECT
IStorage* pStorage; // VT_STORAGE, VT_STORED_OBJECT
CAUI1 cab; // VT_VECTOR | VT_UI1
CAI2 cai; // VT_VECTOR | VT_I2
CAUI2 caui; // VT_VECTOR | VT_UI2
CAI4 cal; // VT_VECTOR | VT_I4
CAUI4 caul; // VT_VECTOR | VT_UI4
CAI8 cah; // VT_VECTOR | VT_I8
CAUI8 cauh; // VT_VECTOR | VT_UI8
CAR4 caflt; // VT_VECTOR | VT_R4
CAR8 cadbl; // VT_VECTOR | VT_R8
CACY cacy; // VT_VECTOR | VT_CY
CADATE cadate; // VT_VECTOR | VT_DATE
CABSTR cabstr; // VT_VECTOR | VT_BSTR
CABOOL cabool; // VT_VECTOR | VT_BOOL
CASCODE cascode; // VT_VECTOR | VT_ERROR
CALPSTR calpstr; // VT_VECTOR | VT_LPSTR
CALPWSTR calpwstr; // VT_VECTOR | VT_LPWSTR
CAFILETIME cafiletime; // VT_VECTOR | VT_FILETIME
CACLSID cauuid; // VT_VECTOR | VT_CLSID
CACLIPDATA caclipdata; // VT_VECTOR | VT_CF
CAPROPVARIANT capropvar; // VT_VECTOR | VT_VARIANT
}DUMMYUNIONNAME; } PROPVARIANT;
#if 0
typedef enum { 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_ERROR=10, VT_BOOL=11, VT_VARIANT=12, VT_UI1=17, VT_UI2=18, VT_UI4=19, VT_I8=20, VT_UI8=21, 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_ILLEGAL=0xFFFFFFFF, VT_TYPEMASK=0xFFF, // a mask for masking VT_VECTOR and other modifiers to get the raw VT_ value.
} PROPVARENUM; #endif // VT_EMPTY
#define VT_ILLEGAL 0xFFFF
typedef enum { PRSPEC_LPWSTR = 0, PRSPEC_PROPID = 1, } PRSPEC;
// typedef LONG PROPID;
typedef struct tagPROPSPEC { ULONG ulKind; // PRSPEC_LPWSTR or PRSPEC_PROPID
union { LPWSTR lpwstr; PROPID propid; }DUMMYUNIONNAME; } PROPSPEC;
typedef GUID FMTID;
typedef struct tagSTATPROPSETSTG { // used in IPropertySetStorage::Enum and IPropertyStorage::Stat
FMTID fmtid; // The fmtid name of this property set.
CLSID clsid; // The class id of this property set.
DWORD grfFlags; // The flag values of this property set as specified in IPropertySetStorage::Create.
FILETIME mtime; // The time in UTC at which this property set was last modified
FILETIME ctime; // The time in UTC at which this property set was created.
FILETIME atime; // The time in UTC at which this property set was last accessed.
} STATPROPSETSTG;
typedef struct tagSTATPROPSTG { LPOLESTR lpwstrName; PROPID propid; VARTYPE vt; } STATPROPSTG;
#undef INTERFACE
#define INTERFACE IEnumSTATPROPSTG
DECLARE_INTERFACE_(IEnumSTATPROPSTG, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(Next) (THIS_ ULONG celt, STATPROPSTG *rgelt, ULONG *pceltFetched) PURE; STDMETHOD(Skip) (THIS_ ULONG celt) PURE; STDMETHOD(Reset)(THIS) PURE; STDMETHOD(Clone) (THIS_ IEnumSTATPROPSTG **ppenum) PURE; };
#undef INTERFACE
#define INTERFACE IEnumSTATPROPSETSTG
DECLARE_INTERFACE_(IEnumSTATPROPSETSTG, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(Next) (THIS_ ULONG celt, STATPROPSETSTG *rgelt, ULONG *pceltFetched) PURE; STDMETHOD(Skip) (THIS_ ULONG celt) PURE; STDMETHOD(Reset)(THIS) PURE; STDMETHOD(Clone) (THIS_ IEnumSTATPROPSTG **ppenum) PURE; };
#undef INTERFACE
#define INTERFACE IPropertyStorage
DECLARE_INTERFACE_(IPropertyStorage, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(ReadMultiple)(THIS_ ULONG cpspec, const PROPSPEC rgpspec[], PROPVARIANT rgvar[]) PURE; STDMETHOD(WriteMultiple)(THIS_ ULONG cpspec, const PROPSPEC rgpspec[], const PROPVARIANT rgvar[], PROPID propidNameFirst) PURE; STDMETHOD(DeleteMultiple)(THIS_ ULONG cpspec, const PROPSPEC rgpspec[]) PURE; STDMETHOD(ReadPropertyNames)(THIS_ ULONG cpropid, const PROPID rgpropid[], LPOLESTR rglpwstrName[]) PURE; STDMETHOD(WritePropertyNames)(THIS_ ULONG cpropid, const PROPID rgpropid[], const LPOLESTR rglpwstrName[]) PURE; STDMETHOD(DeletePropertyNames)(THIS_ ULONG cpropid, const PROPID rgpropid[]) PURE; STDMETHOD(SetClass)(THIS_ REFCLSID clsid) PURE; STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags) PURE; STDMETHOD(Revert)(THIS) PURE; STDMETHOD(Enum)(THIS_ IEnumSTATPROPSTG** ppenm) PURE; STDMETHOD(Stat)(THIS_ STATPROPSETSTG* pstatpsstg) PURE; STDMETHOD(SetTimes)(THIS_ const FILETIME* pmtime, const FILETIME* pctime, const FILETIME* patime) PURE; };
typedef REFGUID REFFMTID;
#undef INTERFACE
#define INTERFACE IPropertySetStorage
DECLARE_INTERFACE_(IPropertySetStorage, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(Create)(THIS_ REFFMTID fmtid, const CLSID* pclsid, DWORD grfFlags, DWORD grfMode, IPropertyStorage** ppPropStg)PURE; STDMETHOD(Open)(THIS_ REFFMTID fmtid, DWORD grfMode, IPropertyStorage** ppPropStg) PURE; STDMETHOD(Delete)(THIS_ REFFMTID fmtid) PURE; STDMETHOD(Enum)(THIS_ IEnumSTATPROPSETSTG** ppenum) PURE; };
typedef enum PROPSETFLAG { PROPSETFLAG_NONSIMPLE = 1, PROPSETFLAG_ANSI = 2, } PROPSETFLAG;
extern const IID IID_IPropertyStorage; extern const IID IID_IEnumSTATPROPSTG; extern const IID IID_IPropertySetStorage; extern const IID IID_IEnumSTATPROPSETSTG;
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // __IPropertyStorage_INTERFACE_DEFINED__
#endif // _PROPSET_H_
|