You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
9.4 KiB
186 lines
9.4 KiB
// --------------------------------------------------------------------------------
|
|
// VariantX.h
|
|
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
|
|
// --------------------------------------------------------------------------------
|
|
#ifndef __VARIANTX_H
|
|
#define __VARIANTX_H
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// Forward Decls
|
|
// --------------------------------------------------------------------------------
|
|
typedef class CMimePropertyContainer *LPCONTAINER;
|
|
typedef struct tagMIMEVARIANT *LPMIMEVARIANT;
|
|
typedef struct tagPROPSYMBOL *LPPROPSYMBOL;
|
|
typedef struct tagHEADOPTIONS *LPHEADOPTIONS;
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// MIMEVARTYPE
|
|
// --------------------------------------------------------------------------------
|
|
typedef enum tagMIMEVARTYPE {
|
|
MVT_EMPTY, // The Variant is Empty
|
|
MVT_STRINGA, // Ansi/multibyte string
|
|
MVT_STRINGW, // Unicode String
|
|
MVT_VARIANT, // PropVariant
|
|
MVT_STREAM, // Internal type used to when saving properties
|
|
MVT_LAST // Illegal, don't use
|
|
} MIMEVARTYPE;
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISSUPPORTEDVT
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISSUPPORTEDVT(_vt) \
|
|
(VT_LPSTR == _vt || VT_LPWSTR == _vt || VT_FILETIME == _vt || VT_UI4 == _vt || VT_I4 == _vt || VT_STREAM == _vt)
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISVALIDVARTYPE
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISVALIDVARTYPE(_vartype) \
|
|
(_vartype > MVT_EMPTY && _vartype < MVT_LAST)
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISVALIDSTRINGA - Validates a PROPSTRINGA
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISVALIDSTRINGA(_pStringA) \
|
|
(NULL != (_pStringA) && NULL != (_pStringA)->pszVal && '\0' == (_pStringA)->pszVal[(_pStringA)->cchVal])
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISVALIDSTRINGW - Validates a PROPSTRINGW
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISVALIDSTRINGW(_pStringW) \
|
|
(NULL != (_pStringW) && NULL != (_pStringW)->pszVal && L'\0' == (_pStringW)->pszVal[(_pStringW)->cchVal])
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISSTRINGA - Determines if a MIMEVARIANT is a valid MVT_STRINGA
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISSTRINGA(_pVariant) \
|
|
(NULL != (_pVariant) && MVT_STRINGA == (_pVariant)->type && ISVALIDSTRINGA(&((_pVariant)->rStringA)))
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ISSTRINGW - Determines if a MIMEVARIANT is a valid MVT_STRINGW
|
|
// ---------------------------------------------------------------------------------------
|
|
#define ISSTRINGW(_pVariant) \
|
|
(NULL != (_pVariant) && MVT_STRINGW == (_pVariant)->type && ISVALIDSTRINGW(&((_pVariant)->rStringW)))
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// PSZSTRINGA - Derefs rStringA.pszVal or uses _pszDefault if not a valid string
|
|
// ---------------------------------------------------------------------------------------
|
|
#define PSZSTRINGA(_pVariant) \
|
|
(ISSTRINGA((_pVariant)) ? (_pVariant)->rStringA.pszVal : NULL)
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// PSZDEFSTRINGA - Derefs rStringA.pszVal or uses _pszDefault if not a valid string
|
|
// ---------------------------------------------------------------------------------------
|
|
#define PSZDEFSTRINGA(_pVariant, _pszDefault) \
|
|
(ISSTRINGA((_pVariant)) ? (_pVariant)->rStringA.pszVal : _pszDefault)
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// PROPSTRINGA
|
|
// --------------------------------------------------------------------------------
|
|
typedef struct tagPROPSTRINGA {
|
|
LPSTR pszVal; // Pointer to multibyte string
|
|
ULONG cchVal; // Number of characters in psz
|
|
} PROPSTRINGA, *LPPROPSTRINGA;
|
|
typedef const PROPSTRINGA *LPCPROPSTRINGA;
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// PROPSTRINGW
|
|
// --------------------------------------------------------------------------------
|
|
typedef struct tagPROPSTRINGW {
|
|
LPWSTR pszVal; // Pointer to multibyte string
|
|
ULONG cchVal; // Number of characters in psz
|
|
} PROPSTRINGW, *LPPROPSTRINGW;
|
|
typedef const PROPSTRINGW *LPCPROPSTRINGW;
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// MIMEVARIANT
|
|
// --------------------------------------------------------------------------------
|
|
typedef struct tagMIMEVARIANT {
|
|
MIMEVARTYPE type; // Property Data Type
|
|
BYTE fCopy; // The data was copied, don't free it
|
|
union {
|
|
PROPSTRINGA rStringA; // MVT_STRINGA
|
|
PROPSTRINGW rStringW; // MVT_STRINGW
|
|
PROPVARIANT rVariant; // MVT_VARIANT
|
|
LPSTREAM pStream; // MVT_STREAM
|
|
};
|
|
} MIMEVARIANT, *LPMIMEVARIANT;
|
|
typedef const MIMEVARIANT *LPCMIMEVARIANT;
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// Convert Variant Flags (WARNING: DO NOT OVERFLAG PROPDATAFLAGS WITH THESE)
|
|
// --------------------------------------------------------------------------------
|
|
#define CVF_NOALLOC FLAG32 // Tells the converter to copy data if it can
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// VARIANTCONVERT
|
|
// --------------------------------------------------------------------------------
|
|
typedef struct tagVARIANTCONVERT {
|
|
LPHEADOPTIONS pOptions; // Header Options
|
|
LPPROPSYMBOL pSymbol; // Property Symbol
|
|
LPINETCSETINFO pCharset; // Charset to use in conversion
|
|
ENCODINGTYPE ietSource; // Encoding of source item
|
|
DWORD dwFlags; // Property Data Flags
|
|
DWORD dwState; // PRSTATE_xxx Flags
|
|
} VARIANTCONVERT, *LPVARIANTCONVERT;
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// HrMimeVariantCopy
|
|
// --------------------------------------------------------------------------------
|
|
HRESULT HrMimeVariantCopy(
|
|
/* in */ DWORD dwFlags, // CVF_xxx Flags
|
|
/* in */ LPMIMEVARIANT pSource,
|
|
/* out */ LPMIMEVARIANT pDest);
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// HrConvertVariant
|
|
// --------------------------------------------------------------------------------
|
|
HRESULT HrConvertVariant(
|
|
/* in */ LPHEADOPTIONS pOptions,
|
|
/* in */ LPPROPSYMBOL pSymbol,
|
|
/* in */ LPINETCSETINFO pCharset,
|
|
/* in */ ENCODINGTYPE ietSource,
|
|
/* in */ DWORD dwFlags,
|
|
/* in */ DWORD dwState,
|
|
/* in */ LPMIMEVARIANT pSource,
|
|
/* in,out */ LPMIMEVARIANT pDest,
|
|
/* out,opt */ BOOL *pfRfc1522=NULL);
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// MimeVariantFree
|
|
// --------------------------------------------------------------------------------
|
|
void MimeVariantFree(
|
|
/* in */ LPMIMEVARIANT pVariant);
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// MimeVariantCleanupFileName
|
|
// --------------------------------------------------------------------------------
|
|
void MimeVariantCleanupFileName(
|
|
/* in */ CODEPAGEID codepage,
|
|
/* in,out */ LPMIMEVARIANT pVariant);
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// MimeVariantStripComments
|
|
// --------------------------------------------------------------------------------
|
|
HRESULT MimeVariantStripComments(
|
|
/* in */ LPMIMEVARIANT pSource,
|
|
/* in,out */ LPMIMEVARIANT pDest,
|
|
/* in,out */ LPBYTE pbScratch,
|
|
/* in */ ULONG cbScratch);
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// MimeVT_To_PropVT
|
|
// ---------------------------------------------------------------------------------------
|
|
inline VARTYPE MimeVT_To_PropVT(LPMIMEVARIANT pVariant) {
|
|
Assert(pVariant);
|
|
if (MVT_STRINGA == pVariant->type)
|
|
return(VT_LPSTR);
|
|
else if (MVT_STRINGW == pVariant->type)
|
|
return(VT_LPWSTR);
|
|
else if (MVT_VARIANT == pVariant->type)
|
|
return(pVariant->rVariant.vt);
|
|
else
|
|
return(VT_EMPTY);
|
|
}
|
|
|
|
#endif // __VARIANTX_H
|