📄 mapidefs.h
字号:
#define MVI_FLAG (MV_FLAG | MV_INSTANCE)
#define MVI_PROP(tag) ((tag) | MVI_FLAG)
/* --------------- */
/* Data Structures */
/* --------------- */
/* Property Tag Array */
typedef struct _SPropTagArray
{
ULONG cValues;
ULONG aulPropTag[MAPI_DIM];
} SPropTagArray, FAR * LPSPropTagArray;
#define CbNewSPropTagArray(_ctag) \
(offsetof(SPropTagArray,aulPropTag) + (_ctag)*sizeof(ULONG))
#define CbSPropTagArray(_lparray) \
(offsetof(SPropTagArray,aulPropTag) + \
(UINT)((_lparray)->cValues)*sizeof(ULONG))
/* SPropTagArray */
#define SizedSPropTagArray(_ctag, _name) \
struct _SPropTagArray_ ## _name \
{ \
ULONG cValues; \
ULONG aulPropTag[_ctag]; \
} _name
/* -------------- */
/* Property Value */
/* -------------- */
typedef struct _SPropValue SPropValue;
/* 32-bit CURRENCY definition stolen from oaidl.h */
/* 16-bit CURRENCY definition stolen from variant.h */
#ifndef _tagCY_DEFINED
#define _tagCY_DEFINED
#define _CY_DEFINED
#if (defined (WIN16) || defined (DOS)) && !defined (_VARIANT_H_)
typedef struct FARSTRUCT tagCY {
#ifdef _MAC
long Hi;
long Lo;
#else
unsigned long Lo;
long Hi;
#endif
} CY;
#elif defined (_WIN32)
/* real definition that makes the C++ compiler happy */
typedef union tagCY {
struct {
#ifdef _MAC
long Hi;
long Lo;
#else
unsigned long Lo;
long Hi;
#endif
};
LONGLONG int64;
} CY;
#endif /* 16-bit vs 32-bit definition */
#endif
/* size is 8 */
typedef CY CURRENCY;
typedef struct _SBinary
{
ULONG cb;
LPBYTE lpb;
} SBinary, FAR *LPSBinary;
typedef struct _SShortArray
{
ULONG cValues;
short int FAR *lpi;
} SShortArray;
typedef struct _SGuidArray
{
ULONG cValues;
GUID FAR *lpguid;
} SGuidArray;
typedef struct _SRealArray
{
ULONG cValues;
float FAR *lpflt;
} SRealArray;
typedef struct _SLongArray
{
ULONG cValues;
LONG FAR *lpl;
} SLongArray;
typedef struct _SLargeIntegerArray
{
ULONG cValues;
LARGE_INTEGER FAR *lpli;
} SLargeIntegerArray;
typedef struct _SDateTimeArray
{
ULONG cValues;
FILETIME FAR *lpft;
} SDateTimeArray;
typedef struct _SAppTimeArray
{
ULONG cValues;
double FAR *lpat;
} SAppTimeArray;
typedef struct _SCurrencyArray
{
ULONG cValues;
CURRENCY FAR *lpcur;
} SCurrencyArray;
typedef struct _SBinaryArray
{
ULONG cValues;
SBinary FAR *lpbin;
} SBinaryArray;
typedef struct _SDoubleArray
{
ULONG cValues;
double FAR *lpdbl;
} SDoubleArray;
typedef struct _SWStringArray
{
ULONG cValues;
LPWSTR FAR *lppszW;
} SWStringArray;
typedef struct _SLPSTRArray
{
ULONG cValues;
LPSTR FAR *lppszA;
} SLPSTRArray;
typedef union _PV
{
short int i; /* case PT_I2 */
LONG l; /* case PT_LONG */
ULONG ul; /* alias for PT_LONG */
float flt; /* case PT_R4 */
double dbl; /* case PT_DOUBLE */
unsigned short int b; /* case PT_BOOLEAN */
CURRENCY cur; /* case PT_CURRENCY */
double at; /* case PT_APPTIME */
FILETIME ft; /* case PT_SYSTIME */
LPSTR lpszA; /* case PT_STRING8 */
SBinary bin; /* case PT_BINARY */
LPWSTR lpszW; /* case PT_UNICODE */
LPGUID lpguid; /* case PT_CLSID */
LARGE_INTEGER li; /* case PT_I8 */
SShortArray MVi; /* case PT_MV_I2 */
SLongArray MVl; /* case PT_MV_LONG */
SRealArray MVflt; /* case PT_MV_R4 */
SDoubleArray MVdbl; /* case PT_MV_DOUBLE */
SCurrencyArray MVcur; /* case PT_MV_CURRENCY */
SAppTimeArray MVat; /* case PT_MV_APPTIME */
SDateTimeArray MVft; /* case PT_MV_SYSTIME */
SBinaryArray MVbin; /* case PT_MV_BINARY */
SLPSTRArray MVszA; /* case PT_MV_STRING8 */
SWStringArray MVszW; /* case PT_MV_UNICODE */
SGuidArray MVguid; /* case PT_MV_CLSID */
SLargeIntegerArray MVli; /* case PT_MV_I8 */
SCODE err; /* case PT_ERROR */
LONG x; /* case PT_NULL, PT_OBJECT (no usable value) */
} __UPV;
typedef struct _SPropValue
{
ULONG ulPropTag;
ULONG dwAlignPad;
union _PV Value;
} SPropValue, FAR * LPSPropValue;
/* --------------------------------------------- */
/* Property Problem and Property Problem Arrays */
/* --------------------------------------------- */
typedef struct _SPropProblem
{
ULONG ulIndex;
ULONG ulPropTag;
SCODE scode;
} SPropProblem, FAR * LPSPropProblem;
typedef struct _SPropProblemArray
{
ULONG cProblem;
SPropProblem aProblem[MAPI_DIM];
} SPropProblemArray, FAR * LPSPropProblemArray;
#define CbNewSPropProblemArray(_cprob) \
(offsetof(SPropProblemArray,aProblem) + (_cprob)*sizeof(SPropProblem))
#define CbSPropProblemArray(_lparray) \
(offsetof(SPropProblemArray,aProblem) + \
(UINT) ((_lparray)->cProblem*sizeof(SPropProblem)))
#define SizedSPropProblemArray(_cprob, _name) \
struct _SPropProblemArray_ ## _name \
{ \
ULONG cProblem; \
SPropProblem aProblem[_cprob]; \
} _name
/*
* ENTRYLIST
*/
typedef SBinaryArray ENTRYLIST, FAR *LPENTRYLIST;
/*
* FLATENTRYLIST
* MTSID
* FLATMTSIDLIST
*/
typedef struct {
ULONG cb;
BYTE abEntry[MAPI_DIM];
} FLATENTRY, FAR *LPFLATENTRY;
typedef struct {
ULONG cEntries;
ULONG cbEntries;
BYTE abEntries[MAPI_DIM];
} FLATENTRYLIST, FAR *LPFLATENTRYLIST;
typedef struct {
ULONG cb;
BYTE ab[MAPI_DIM];
} MTSID, FAR *LPMTSID;
typedef struct {
ULONG cMTSIDs;
ULONG cbMTSIDs;
BYTE abMTSIDs[MAPI_DIM];
} FLATMTSIDLIST, FAR *LPFLATMTSIDLIST;
#define CbNewFLATENTRY(_cb) (offsetof(FLATENTRY,abEntry) + (_cb))
#define CbFLATENTRY(_lpentry) (offsetof(FLATENTRY,abEntry) + (_lpentry)->cb)
#define CbNewFLATENTRYLIST(_cb) (offsetof(FLATENTRYLIST,abEntries) + (_cb))
#define CbFLATENTRYLIST(_lplist) (offsetof(FLATENTRYLIST,abEntries) + (_lplist)->cbEntries)
#define CbNewMTSID(_cb) (offsetof(MTSID,ab) + (_cb))
#define CbMTSID(_lpentry) (offsetof(MTSID,ab) + (_lpentry)->cb)
#define CbNewFLATMTSIDLIST(_cb) (offsetof(FLATMTSIDLIST,abMTSIDs) + (_cb))
#define CbFLATMTSIDLIST(_lplist) (offsetof(FLATMTSIDLIST,abMTSIDs) + (_lplist)->cbMTSIDs)
/* No SizedXXX macros for these types. */
/* ------------------------------ */
/* ADRENTRY, ADRLIST */
typedef struct _ADRENTRY
{
ULONG ulReserved1; /* Never used */
ULONG cValues;
LPSPropValue rgPropVals;
} ADRENTRY, FAR * LPADRENTRY;
typedef struct _ADRLIST
{
ULONG cEntries;
ADRENTRY aEntries[MAPI_DIM];
} ADRLIST, FAR * LPADRLIST;
#define CbNewADRLIST(_centries) \
(offsetof(ADRLIST,aEntries) + (_centries)*sizeof(ADRENTRY))
#define CbADRLIST(_lpadrlist) \
(offsetof(ADRLIST,aEntries) + (UINT)(_lpadrlist)->cEntries*sizeof(ADRENTRY))
#define SizedADRLIST(_centries, _name) \
struct _ADRLIST_ ## _name \
{ \
ULONG cEntries; \
ADRENTRY aEntries[_centries]; \
} _name
/* ------------------------------ */
/* SRow, SRowSet */
typedef struct _SRow
{
ULONG ulAdrEntryPad; /* Pad so SRow's can map to ADRENTRY's */
ULONG cValues; /* Count of property values */
LPSPropValue lpProps; /* Property value array */
} SRow, FAR * LPSRow;
typedef struct _SRowSet
{
ULONG cRows; /* Count of rows */
SRow aRow[MAPI_DIM]; /* Array of rows */
} SRowSet, FAR * LPSRowSet;
#define CbNewSRowSet(_crow) (offsetof(SRowSet,aRow) + (_crow)*sizeof(SRow))
#define CbSRowSet(_lprowset) (offsetof(SRowSet,aRow) + \
(UINT)((_lprowset)->cRows*sizeof(SRow)))
#define SizedSRowSet(_crow, _name) \
struct _SRowSet_ ## _name \
{ \
ULONG cRows; \
SRow aRow[_crow]; \
} _name
/* MAPI Allocation Routines ------------------------------------------------ */
typedef SCODE (STDMETHODCALLTYPE ALLOCATEBUFFER)(
ULONG cbSize,
LPVOID FAR * lppBuffer
);
typedef SCODE (STDMETHODCALLTYPE ALLOCATEMORE)(
ULONG cbSize,
LPVOID lpObject,
LPVOID FAR * lppBuffer
);
typedef ULONG (STDAPICALLTYPE FREEBUFFER)(
LPVOID lpBuffer
);
typedef ALLOCATEBUFFER FAR *LPALLOCATEBUFFER;
typedef ALLOCATEMORE FAR * LPALLOCATEMORE;
typedef FREEBUFFER FAR * LPFREEBUFFER;
/* MAPI Component Object Model Macros -------------------------------------- */
#if defined(MAPI_IF) && (!defined(__cplusplus) || defined(CINTERFACE))
#define DECLARE_MAPI_INTERFACE(iface) \
typedef struct iface##Vtbl iface##Vtbl, FAR * iface; \
struct iface##Vtbl
#define DECLARE_MAPI_INTERFACE_(iface, baseiface) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -