// // Function prototypes // #undef INTERFACE #define INTERFACE struct _IPDAT #undef METHOD_PREFIX #define METHOD_PREFIX IPDAT_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IPDAT_) MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IPROPDATA_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IPDAT_) MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IPROPDATA_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IPDAT_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IPROPDATA_METHODS(IMPL) }; /* Generic part of property linked lists. */ typedef struct _lstlnk { struct _lstlnk FAR * lpNext; ULONG ulKey; } LSTLNK, FAR * LPLSTLNK; typedef LPLSTLNK FAR * LPPLSTLNK; /* Linked list of property values. */ typedef struct _lstspv { LSTLNK lstlnk; LPSPropValue lpPropVal; ULONG ulAccess; } LSTSPV, FAR * LPLSTSPV; #define CBLSTSPV sizeof(LSTSPV) /* Linked list of property ID to NAME mappings. */ typedef struct _lstspn { LSTLNK lstlnk; LPMAPINAMEID lpPropName; } LSTSPN, FAR * LPLSTSPN; typedef struct _IPDAT { IPDAT_Vtbl FAR * lpVtbl; // Generic IMAPIUnknown portion UNKOBJ_MEMBERS; UNKINST inst; // // Says whether or not this object (as a whole) is modifiable // ULONG ulObjAccess; // List of properties in this object LPLSTSPV lpLstSPV; // Count of properties in this object ULONG ulCount; // List of property ID to NAME maps for this object LPLSTSPN lpLstSPN; // Next ID to use when creating a new NAME to ID map ULONG ulNextMapID; } IPDAT, *LPIPDAT; #define CBIPDAT sizeof(IPDAT) /* dimensionof determines the number of elements in "array". */ #ifdef WIN16 #ifndef dimensionof #define dimensionof(rg) (sizeof(rg)/sizeof(*(rg))) #endif // !dimensionof #else // WIN16 #define dimensionof(rg) (sizeof(rg)/sizeof(*(rg))) #endif // WIN16 #define SET_PROP_TYPE(ultag, ultype) (ultag) = ((ultag) & 0xffff0000) \ | (ultype) #define MIN_NAMED_PROP_ID 0x8000 #define MAX_NAMED_PROP_ID 0xfffe SCODE ScWCToAnsiMore( LPALLOCATEMORE lpMapiAllocMore, LPVOID lpBase, LPWSTR lpszWC, LPSTR * lppszAnsi ); SCODE ScAnsiToWCMore( LPALLOCATEMORE lpMapiAllocMore, LPVOID lpBase, LPSTR lpszAnsi, LPWSTR * lppszWC ); LPSTR ConvertWtoA(LPCWSTR lpszW); LPWSTR ConvertAtoW(LPCSTR lpszA); SCODE ScConvertAPropsToW(LPALLOCATEMORE lpMapiAllocMore, LPSPropValue lpPropArray, ULONG ulcProps, ULONG ulStart); SCODE ScConvertWPropsToA(LPALLOCATEMORE lpMapiAllocMore, LPSPropValue lpPropArray, ULONG ulcProps, ULONG ulStart);