/*** Autogenerated by WIDL 11.8 from ../wine/include/mimeole.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __mimeole_h__
#define __mimeole_h__

/* Forward declarations */

#ifndef __IMimeInternational_FWD_DEFINED__
#define __IMimeInternational_FWD_DEFINED__
typedef interface IMimeInternational IMimeInternational;
#ifdef __cplusplus
interface IMimeInternational;
#endif /* __cplusplus */
#endif

#ifndef __IMimeSecurity_FWD_DEFINED__
#define __IMimeSecurity_FWD_DEFINED__
typedef interface IMimeSecurity IMimeSecurity;
#ifdef __cplusplus
interface IMimeSecurity;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumHeaderRows_FWD_DEFINED__
#define __IMimeEnumHeaderRows_FWD_DEFINED__
typedef interface IMimeEnumHeaderRows IMimeEnumHeaderRows;
#ifdef __cplusplus
interface IMimeEnumHeaderRows;
#endif /* __cplusplus */
#endif

#ifndef __IMimeHeaderTable_FWD_DEFINED__
#define __IMimeHeaderTable_FWD_DEFINED__
typedef interface IMimeHeaderTable IMimeHeaderTable;
#ifdef __cplusplus
interface IMimeHeaderTable;
#endif /* __cplusplus */
#endif

#ifndef __IMimePropertySchema_FWD_DEFINED__
#define __IMimePropertySchema_FWD_DEFINED__
typedef interface IMimePropertySchema IMimePropertySchema;
#ifdef __cplusplus
interface IMimePropertySchema;
#endif /* __cplusplus */
#endif

#ifndef __IMimePropertySet_FWD_DEFINED__
#define __IMimePropertySet_FWD_DEFINED__
typedef interface IMimePropertySet IMimePropertySet;
#ifdef __cplusplus
interface IMimePropertySet;
#endif /* __cplusplus */
#endif

#ifndef __IMimeAddressTable_FWD_DEFINED__
#define __IMimeAddressTable_FWD_DEFINED__
typedef interface IMimeAddressTable IMimeAddressTable;
#ifdef __cplusplus
interface IMimeAddressTable;
#endif /* __cplusplus */
#endif

#ifndef __IMimeWebDocument_FWD_DEFINED__
#define __IMimeWebDocument_FWD_DEFINED__
typedef interface IMimeWebDocument IMimeWebDocument;
#ifdef __cplusplus
interface IMimeWebDocument;
#endif /* __cplusplus */
#endif

#ifndef __IMimeBody_FWD_DEFINED__
#define __IMimeBody_FWD_DEFINED__
typedef interface IMimeBody IMimeBody;
#ifdef __cplusplus
interface IMimeBody;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessageTree_FWD_DEFINED__
#define __IMimeMessageTree_FWD_DEFINED__
typedef interface IMimeMessageTree IMimeMessageTree;
#ifdef __cplusplus
interface IMimeMessageTree;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessage_FWD_DEFINED__
#define __IMimeMessage_FWD_DEFINED__
typedef interface IMimeMessage IMimeMessage;
#ifdef __cplusplus
interface IMimeMessage;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessageCallback_FWD_DEFINED__
#define __IMimeMessageCallback_FWD_DEFINED__
typedef interface IMimeMessageCallback IMimeMessageCallback;
#ifdef __cplusplus
interface IMimeMessageCallback;
#endif /* __cplusplus */
#endif

#ifndef __IPersistMime_FWD_DEFINED__
#define __IPersistMime_FWD_DEFINED__
typedef interface IPersistMime IPersistMime;
#ifdef __cplusplus
interface IPersistMime;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessageParts_FWD_DEFINED__
#define __IMimeMessageParts_FWD_DEFINED__
typedef interface IMimeMessageParts IMimeMessageParts;
#ifdef __cplusplus
interface IMimeMessageParts;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumProperties_FWD_DEFINED__
#define __IMimeEnumProperties_FWD_DEFINED__
typedef interface IMimeEnumProperties IMimeEnumProperties;
#ifdef __cplusplus
interface IMimeEnumProperties;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumAddressTypes_FWD_DEFINED__
#define __IMimeEnumAddressTypes_FWD_DEFINED__
typedef interface IMimeEnumAddressTypes IMimeEnumAddressTypes;
#ifdef __cplusplus
interface IMimeEnumAddressTypes;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumMessageParts_FWD_DEFINED__
#define __IMimeEnumMessageParts_FWD_DEFINED__
typedef interface IMimeEnumMessageParts IMimeEnumMessageParts;
#ifdef __cplusplus
interface IMimeEnumMessageParts;
#endif /* __cplusplus */
#endif

#ifndef __IHashTable_FWD_DEFINED__
#define __IHashTable_FWD_DEFINED__
typedef interface IHashTable IHashTable;
#ifdef __cplusplus
interface IHashTable;
#endif /* __cplusplus */
#endif

#ifndef __IMimeAllocator_FWD_DEFINED__
#define __IMimeAllocator_FWD_DEFINED__
typedef interface IMimeAllocator IMimeAllocator;
#ifdef __cplusplus
interface IMimeAllocator;
#endif /* __cplusplus */
#endif

#ifndef __IMimeObjResolver_FWD_DEFINED__
#define __IMimeObjResolver_FWD_DEFINED__
typedef interface IMimeObjResolver IMimeObjResolver;
#ifdef __cplusplus
interface IMimeObjResolver;
#endif /* __cplusplus */
#endif

#ifndef __IFontCache_FWD_DEFINED__
#define __IFontCache_FWD_DEFINED__
typedef interface IFontCache IFontCache;
#ifdef __cplusplus
interface IFontCache;
#endif /* __cplusplus */
#endif

#ifndef __IFontCacheNotify_FWD_DEFINED__
#define __IFontCacheNotify_FWD_DEFINED__
typedef interface IFontCacheNotify IFontCacheNotify;
#ifdef __cplusplus
interface IFontCacheNotify;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEditTag_FWD_DEFINED__
#define __IMimeEditTag_FWD_DEFINED__
typedef interface IMimeEditTag IMimeEditTag;
#ifdef __cplusplus
interface IMimeEditTag;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEditTagCollection_FWD_DEFINED__
#define __IMimeEditTagCollection_FWD_DEFINED__
typedef interface IMimeEditTagCollection IMimeEditTagCollection;
#ifdef __cplusplus
interface IMimeEditTagCollection;
#endif /* __cplusplus */
#endif

#ifndef __IMimeSecurityCallback_FWD_DEFINED__
#define __IMimeSecurityCallback_FWD_DEFINED__
typedef interface IMimeSecurityCallback IMimeSecurityCallback;
#ifdef __cplusplus
interface IMimeSecurityCallback;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <ocidl.h>
#include <objidl.h>
#include <propidl.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IMimeMessageCallback_FWD_DEFINED__
#define __IMimeMessageCallback_FWD_DEFINED__
typedef interface IMimeMessageCallback IMimeMessageCallback;
#ifdef __cplusplus
interface IMimeMessageCallback;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumAddressTypes_FWD_DEFINED__
#define __IMimeEnumAddressTypes_FWD_DEFINED__
typedef interface IMimeEnumAddressTypes IMimeEnumAddressTypes;
#ifdef __cplusplus
interface IMimeEnumAddressTypes;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessageParts_FWD_DEFINED__
#define __IMimeMessageParts_FWD_DEFINED__
typedef interface IMimeMessageParts IMimeMessageParts;
#ifdef __cplusplus
interface IMimeMessageParts;
#endif /* __cplusplus */
#endif

#ifndef __IMimeMessageTree_FWD_DEFINED__
#define __IMimeMessageTree_FWD_DEFINED__
typedef interface IMimeMessageTree IMimeMessageTree;
#ifdef __cplusplus
interface IMimeMessageTree;
#endif /* __cplusplus */
#endif

#ifndef __IMimeBody_FWD_DEFINED__
#define __IMimeBody_FWD_DEFINED__
typedef interface IMimeBody IMimeBody;
#ifdef __cplusplus
interface IMimeBody;
#endif /* __cplusplus */
#endif

#ifndef __IMimeEnumProperties_FWD_DEFINED__
#define __IMimeEnumProperties_FWD_DEFINED__
typedef interface IMimeEnumProperties IMimeEnumProperties;
#ifdef __cplusplus
interface IMimeEnumProperties;
#endif /* __cplusplus */
#endif

#ifdef _MIMEOLE_
#define MIMEOLEAPI STDAPI
#define MIMEOLEAPI_(type) STDAPI_(type)
#else
#define MIMEOLEAPI DECLSPEC_IMPORT STDAPI
#define MIMEOLEAPI_(type) DECLSPEC_IMPORT STDAPI_(type)
#endif
DEFINE_GUID(CLSID_IMimeBody,      0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeMessage,   0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeSecurity,  0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeHtmlProtocol,0x5300401,0xbcbc, 0x11d0, 0x85, 0xe3, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_MimeEdit,       0x1c82ead9, 0x508e, 0x11d1, 0x8d, 0xcf, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf9);
#define MIME_E_REG_CREATE_KEY         0x800cce01
#define MIME_E_REG_QUERY_INFO         0x800cce02
#define MIME_E_INVALID_ENCTYPE        0x800cce03
#define MIME_E_BOUNDARY_MISMATCH      0x800cce04
#define MIME_E_NOT_FOUND              0x800cce05
#define MIME_E_NO_DATA                0x800cce05
#define MIME_E_BUFFER_TOO_SMALL       0x800cce06
#define MIME_E_INVALID_ITEM_FLAGS     0x800cce07
#define MIME_E_ONE_LINE_ITEME         0x800cce08
#define MIME_E_INVALID_HANDLE         0x800cce09
#define MIME_E_CHARSET_TRANSLATE      0x800cce0a
#define MIME_E_NOT_INITIALIZED        0x800cce0b
#define MIME_E_INVALID_OPTION_VALUE   0x800cce1f
#define MIME_E_INVALID_OPTION_ID      0x800cce20
#define MIME_E_INVALID_HEADER_NAME    0x800cce21
#define MIME_E_NOT_BOUND              0x800cce22
#define MIME_E_MAX_SIZE_TOO_SMALL     0x800cce23
#define MIME_E_MULTIPART_HAS_CHILDREN 0x800cce25
#define MIME_E_INVALID_PROP_FLAGS     0x800cce26
#define MIME_E_INVALID_ADDRESS_TYPE   0x800cce27
#define MIME_E_INVALID_OBJECT_IID     0x800cce28
#define MIME_E_MLANG_DLL_NOT_FOUND    0x800cce29
#define MIME_E_ROOT_NOT_EMPTY         0x800cce2a
#define MIME_E_MLANG_BAD_DLL          0x800cce2b
#define MIME_E_REG_OPEN_KEY           0x800cce2c
#define MIME_E_INVALID_INET_DATE      0x800cce2d
#define MIME_E_INVALID_BODYTYPE       0x800cce2e
#define MIME_E_INVALID_DELETE_TYPE    0x800cce2f
#define MIME_E_OPTION_HAS_NO_VALUE    0x800cce30
#define MIME_E_INVALID_CHARSET_TYPE   0x800cce31
#define MIME_E_INVALID_TEXT_TYPE      0x800cce38
#define MIME_E_SECURITY_NOOP          0x800cceb1
#define MIME_S_SECURITY_NOOP          0x000cceb1
typedef enum tagMIMEPROPID {
    PID_HDR_NEWSGROUP  = 2,
    PID_HDR_NEWSGROUPS = 3,
    PID_HDR_REFS       = 4,
    PID_HDR_SUBJECT    = 5,
    PID_HDR_FROM       = 6,
    PID_HDR_MESSAGEID  = 7,
    PID_HDR_RETURNPATH = 8,
    PID_HDR_RR         = 9,
    PID_HDR_RETRCPTO   = 10,
    PID_HDR_APPARTO    = 11,
    PID_HDR_DATE       = 12,
    PID_HDR_RECEIVED   = 13,
    PID_HDR_REPLYTO    = 14,
    PID_HDR_XMAILER    = 15,
    PID_HDR_BCC        = 16,
    PID_HDR_MIMEVER    = 17,
    PID_HDR_CNTTYPE    = 18,
    PID_HDR_CNTXFER    = 19,
    PID_HDR_CNTID      = 20,
    PID_HDR_CNTDESC    = 21,
    PID_HDR_CNTDISP    = 22,
    PID_HDR_CNTBASE    = 23,
    PID_HDR_CNTLOC     = 24,
    PID_HDR_TO         = 25,
    PID_HDR_PATH       = 26,
    PID_HDR_FOLLOWUPTO = 27,
    PID_HDR_EXPIRES    = 28,
    PID_HDR_CC         = 29,
    PID_HDR_CONTROL    = 30,
    PID_HDR_DISTRIB    = 31,
    PID_HDR_KEYWORDS   = 32,
    PID_HDR_SUMMARY    = 33,
    PID_HDR_APPROVED   = 34,
    PID_HDR_LINES      = 35,
    PID_HDR_XREF       = 36,
    PID_HDR_ORG        = 37,
    PID_HDR_XNEWSRDR   = 38,
    PID_HDR_XPRI       = 39,
    PID_HDR_XMSPRI     = 40,
    PID_PAR_FILENAME   = 41,
    PID_PAR_BOUNDARY   = 42,
    PID_PAR_CHARSET    = 43,
    PID_PAR_NAME       = 44,
    PID_ATT_FILENAME   = 45,
    PID_ATT_GENFNAME   = 46,
    PID_ATT_PRITYPE    = 47,
    PID_ATT_SUBTYPE    = 48,
    PID_ATT_NORMSUBJ   = 49,
    PID_ATT_ILLEGAL    = 50,
    PID_ATT_RENDERED   = 51,
    PID_ATT_SENTTIME   = 52,
    PID_ATT_RECVTIME   = 53,
    PID_ATT_PRIORITY   = 54,
    PID_HDR_COMMENT    = 55,
    PID_HDR_ENCODING   = 56,
    PID_HDR_ENCRYPTED  = 57,
    PID_HDR_OFFSETS    = 58,
    PID_HDR_XUNSENT    = 59,
    PID_HDR_ARTICLEID  = 60,
    PID_HDR_SENDER     = 61,
    PID_ATT_SERVER     = 62,
    PID_ATT_ACCOUNT    = 63,
    PID_ATT_UIDL       = 64,
    PID_ATT_STOREMSGID = 65,
    PID_ATT_USERNAME   = 66,
    PID_ATT_FORWARDTO  = 67,
    PID_ATT_STOREFOLDERID = 68,
    PID_ATT_GHOSTED       = 69,
    PID_ATT_UNCACHEDSIZE  = 70,
    PID_ATT_COMBINED      = 71,
    PID_ATT_AUTOINLINED   = 72,
    PID_HDR_DISP_NOTIFICATION_TO = 73,
    PID_PAR_REPLYTYPE     = 74,
    PID_PAR_FORMAT        = 75,
    PID_ATT_FORMAT        = 76,
    PID_HDR_INREPLYTO     = 77,
    PID_ATT_ACCOUNTNAME   = 78,
    PID_LAST              = 79,
} MIMEPROPID;
#define ISPIDSTR(_name)               (((DWORD_PTR)(_name) >> 16) == 0)
#define STRTOPID(_name)               ((DWORD)((DWORD_PTR)((LPCSTR)(_name))))
#define PIDTOSTR(_id)                 ((LPCSTR)((DWORD_PTR)(_id)))
#define TYPEDID_ID(_typedid)          (((ULONG)(_typedid))>>16)
#define TYPEDID_MASK                  ((ULONG)0xffff)
#define TYPEDID_TYPE(t)               ((VARTYPE)((t) & TYPEDID_MASK))
#define OID_ALLOW_8BIT_HEADER         (0x00010000 | VT_BOOL)
#define OID_CBMAX_HEADER_LINE         (0x00020000 | VT_UI4)
#define OID_SAVE_FORMAT               (0x00030000 | VT_UI4)
#define OID_WRAP_BODY_TEXT            (0x00040000 | VT_BOOL)
#define OID_CBMAX_BODY_LINE           (0x00050000 | VT_UI4)
#define OID_TRANSMIT_BODY_ENCODING    (0x00060000 | VT_UI4)
#define OID_TRANSMIT_TEXT_ENCODING    (0x00070000 | VT_UI4)
#define OID_GENERATE_MESSAGE_ID       (0x00080000 | VT_BOOL)
#define OID_HIDE_TNEF_ATTACHMENTS     (0x000e0000 | VT_BOOL)
#define OID_CLEANUP_TREE_ON_SAVE      (0x000f0000 | VT_BOOL)
#define OID_BODY_REMOVE_NBSP          (0x00140000 | VT_BOOL)
#define OID_DEFAULT_BODY_CHARSET      (0x00150000 | VT_UI4)
#define OID_DEFAULT_HEADER_CHARSET    (0x00160000 | VT_UI4)
#define OID_DBCS_ESCAPE_IS_8BIT       (0x00170000 | VT_BOOL)
#define OID_SECURITY_TYPE             (0x00180000 | VT_UI4)
#define OID_SECURITY_HWND_OWNER       (0x00320000 | VT_UI4)
#define OID_HEADER_RELOAD_TYPE        (0x00370000 | VT_UI4)
#define OID_CAN_INLINE_TEXT_BODIES    (0x00380000 | VT_BOOL)
#define OID_SHOW_MACBINARY            (0x00390000 | VT_BOOL)
#define OID_SAVEBODY_KEEPBOUNDARY     (0x00400000 | VT_BOOL)
#define OID_SECURITY_2KEY_CERT_BAG    (0x00590000 | VT_VECTOR | VT_UI4)
#define OID_SECURITY_2KEY_CERT_BAG_64 (0x00590000 | VT_VECTOR | VT_UI8)
#ifndef __MIMEOLE_LIBRARY_DEFINED__
#define __MIMEOLE_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_MIMEOLE, 0xe4b28371, 0x83b0, 0x11d0, 0x82,0x59, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);

typedef void *HCHARSET;
typedef void *HBODY;
typedef void *HHEADERROW;
typedef HCHARSET *LPHCHARSET;
typedef HBODY *LPHBODY;
typedef HHEADERROW *LPHHEADERROW;
typedef DWORD TYPEDID;
typedef const PROPVARIANT *LPCPROPVARIANT;
typedef const BLOB *LPCBLOB;
typedef enum tagRELOADTYPE {
    RELOAD_HEADER_NONE = 0,
    RELOAD_HEADER_RESET = 1,
    RELOAD_HEADER_APPEND = 2,
    RELOAD_HEADER_REPLACE = 3
} RELOADTYPE;
typedef enum tagMIMESAVETYPE {
    SAVE_RFC822 = 0,
    SAVE_RFC1521 = 1
} MIMESAVETYPE;
typedef enum tagCSETAPPLYTYPE {
    CSET_APPLY_UNTAGGED = 0,
    CSET_APPLY_ALL = 1,
    CSET_APPLY_TAG_ALL = 2
} CSETAPPLYTYPE;
typedef enum tagENCODINGTYPE {
    IET_BINARY = 0,
    IET_BASE64 = 1,
    IET_UUENCODE = 2,
    IET_QP = 3,
    IET_7BIT = 4,
    IET_8BIT = 5,
    IET_INETCSET = 6,
    IET_UNICODE = 7,
    IET_RFC1522 = 8,
    IET_ENCODED = 9,
    IET_CURRENT = 10,
    IET_UNKNOWN = 11,
    IET_BINHEX40 = 12,
    IET_LAST = 13
} ENCODINGTYPE;
#define IET_DECODED (IET_BINARY)

#define CCHMAX_HEADER_LINE (1000)

/*****************************************************************************
 * IMimeInternational interface
 */
#ifndef __IMimeInternational_INTERFACE_DEFINED__
#define __IMimeInternational_INTERFACE_DEFINED__

typedef IMimeInternational *LPMIMEINTERNATIONAL;
typedef DWORD CODEPAGEID;
#define CP_USASCII (1252)

#define CP_UNICODE (1200)

#define CP_JAUTODETECT (50932)

#define CP_KAUTODETECT (50949)

#define CP_ISO2022JPESC (50221)

#define CP_ISO2022JPSIO (50222)

#define CCHMAX_CSET_NAME (128)

#define CCHMAX_LANG_NAME (128)

#define CCHMAX_FACE_NAME (128)

typedef struct tagINETCSETINFO {
    CHAR szName[128];
    HCHARSET hCharset;
    CODEPAGEID cpiWindows;
    CODEPAGEID cpiInternet;
    DWORD dwReserved1;
} INETCSETINFO;
typedef struct tagINETCSETINFO *LPINETCSETINFO;
typedef enum tagINETLANGMASK {
    ILM_FAMILY = 0x1,
    ILM_NAME = 0x2,
    ILM_BODYCSET = 0x4,
    ILM_HEADERCSET = 0x8,
    ILM_WEBCSET = 0x10,
    ILM_FIXEDFONT = 0x20,
    ILM_VARIABLEFONT = 0x40
} INETLANGMASK;
typedef struct tagCODEPAGEINFO {
    DWORD dwMask;
    CODEPAGEID cpiCodePage;
    BOOL fIsValidCodePage;
    ULONG ulMaxCharSize;
    BOOL fInternetCP;
    CODEPAGEID cpiFamily;
    CHAR szName[128];
    CHAR szBodyCset[128];
    CHAR szHeaderCset[128];
    CHAR szWebCset[128];
    CHAR szFixedFont[128];
    CHAR szVariableFont[128];
    ENCODINGTYPE ietNewsDefault;
    ENCODINGTYPE ietMailDefault;
    DWORD dwReserved1;
} CODEPAGEINFO;
typedef struct tagCODEPAGEINFO *LPCODEPAGEINFO;
typedef struct tagRFC1522INFO {
    BOOL fRfc1522Allowed;
    BOOL fRfc1522Used;
    BOOL fAllow8bit;
    HCHARSET hRfc1522Cset;
} RFC1522INFO;
typedef struct tagRFC1522INFO *LPRFC1522INFO;
typedef enum tagCHARSETTYPE {
    CHARSET_BODY = 0,
    CHARSET_HEADER = 1,
    CHARSET_WEB = 2
} CHARSETTYPE;
DEFINE_GUID(IID_IMimeInternational, 0xc5588349, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c5588349-7f86-11d0-8252-00c04fd85ab4")
IMimeInternational : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetDefaultCharset(
        HCHARSET hCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageCharset(
        CODEPAGEID cpiCodePage,
        CHARSETTYPE ctCsetType,
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindCharset(
        LPCSTR pszCharset,
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharsetInfo(
        HCHARSET hCharset,
        LPINETCSETINFO pCsetInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageInfo(
        CODEPAGEID cpiCodePage,
        LPCODEPAGEINFO pCodePageInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanConvertCodePages(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeHeader(
        HCHARSET hCharset,
        LPCSTR pszData,
        LPPROPVARIANT pDecoded,
        LPRFC1522INFO pRfc1522Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeHeader(
        HCHARSET hCharset,
        LPPROPVARIANT pData,
        LPSTR *ppszEncoded,
        LPRFC1522INFO pRfc1522Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertBuffer(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPBLOB pIn,
        LPBLOB pOut,
        ULONG *pcbRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertString(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPPROPVARIANT pIn,
        LPPROPVARIANT pOut) = 0;

    virtual HRESULT STDMETHODCALLTYPE MLANG_ConvertInetReset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MLANG_ConvertInetString(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPCSTR pSource,
        int *pnSizeOfSource,
        LPSTR pDestination,
        int *pnDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE Rfc1522Decode(
        LPCSTR pszValue,
        LPSTR pszCharset,
        ULONG cchmax,
        LPSTR *ppszDecoded) = 0;

    virtual HRESULT STDMETHODCALLTYPE Rfc1522Encode(
        LPCSTR pszValue,
        HCHARSET hCharset,
        LPSTR *ppszEncoded) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeInternational, 0xc5588349, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeInternationalVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeInternational *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeInternational *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeInternational *This);

    /*** IMimeInternational methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDefaultCharset)(
        IMimeInternational *This,
        HCHARSET hCharset);

    HRESULT (STDMETHODCALLTYPE *GetDefaultCharset)(
        IMimeInternational *This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *GetCodePageCharset)(
        IMimeInternational *This,
        CODEPAGEID cpiCodePage,
        CHARSETTYPE ctCsetType,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *FindCharset)(
        IMimeInternational *This,
        LPCSTR pszCharset,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *GetCharsetInfo)(
        IMimeInternational *This,
        HCHARSET hCharset,
        LPINETCSETINFO pCsetInfo);

    HRESULT (STDMETHODCALLTYPE *GetCodePageInfo)(
        IMimeInternational *This,
        CODEPAGEID cpiCodePage,
        LPCODEPAGEINFO pCodePageInfo);

    HRESULT (STDMETHODCALLTYPE *CanConvertCodePages)(
        IMimeInternational *This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest);

    HRESULT (STDMETHODCALLTYPE *DecodeHeader)(
        IMimeInternational *This,
        HCHARSET hCharset,
        LPCSTR pszData,
        LPPROPVARIANT pDecoded,
        LPRFC1522INFO pRfc1522Info);

    HRESULT (STDMETHODCALLTYPE *EncodeHeader)(
        IMimeInternational *This,
        HCHARSET hCharset,
        LPPROPVARIANT pData,
        LPSTR *ppszEncoded,
        LPRFC1522INFO pRfc1522Info);

    HRESULT (STDMETHODCALLTYPE *ConvertBuffer)(
        IMimeInternational *This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPBLOB pIn,
        LPBLOB pOut,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *ConvertString)(
        IMimeInternational *This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPPROPVARIANT pIn,
        LPPROPVARIANT pOut);

    HRESULT (STDMETHODCALLTYPE *MLANG_ConvertInetReset)(
        IMimeInternational *This);

    HRESULT (STDMETHODCALLTYPE *MLANG_ConvertInetString)(
        IMimeInternational *This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPCSTR pSource,
        int *pnSizeOfSource,
        LPSTR pDestination,
        int *pnDstSize);

    HRESULT (STDMETHODCALLTYPE *Rfc1522Decode)(
        IMimeInternational *This,
        LPCSTR pszValue,
        LPSTR pszCharset,
        ULONG cchmax,
        LPSTR *ppszDecoded);

    HRESULT (STDMETHODCALLTYPE *Rfc1522Encode)(
        IMimeInternational *This,
        LPCSTR pszValue,
        HCHARSET hCharset,
        LPSTR *ppszEncoded);

    END_INTERFACE
} IMimeInternationalVtbl;

interface IMimeInternational {
    CONST_VTBL IMimeInternationalVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeInternational_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeInternational_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeInternational_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeInternational methods ***/
#define IMimeInternational_SetDefaultCharset(This,hCharset) (This)->lpVtbl->SetDefaultCharset(This,hCharset)
#define IMimeInternational_GetDefaultCharset(This,phCharset) (This)->lpVtbl->GetDefaultCharset(This,phCharset)
#define IMimeInternational_GetCodePageCharset(This,cpiCodePage,ctCsetType,phCharset) (This)->lpVtbl->GetCodePageCharset(This,cpiCodePage,ctCsetType,phCharset)
#define IMimeInternational_FindCharset(This,pszCharset,phCharset) (This)->lpVtbl->FindCharset(This,pszCharset,phCharset)
#define IMimeInternational_GetCharsetInfo(This,hCharset,pCsetInfo) (This)->lpVtbl->GetCharsetInfo(This,hCharset,pCsetInfo)
#define IMimeInternational_GetCodePageInfo(This,cpiCodePage,pCodePageInfo) (This)->lpVtbl->GetCodePageInfo(This,cpiCodePage,pCodePageInfo)
#define IMimeInternational_CanConvertCodePages(This,cpiSource,cpiDest) (This)->lpVtbl->CanConvertCodePages(This,cpiSource,cpiDest)
#define IMimeInternational_DecodeHeader(This,hCharset,pszData,pDecoded,pRfc1522Info) (This)->lpVtbl->DecodeHeader(This,hCharset,pszData,pDecoded,pRfc1522Info)
#define IMimeInternational_EncodeHeader(This,hCharset,pData,ppszEncoded,pRfc1522Info) (This)->lpVtbl->EncodeHeader(This,hCharset,pData,ppszEncoded,pRfc1522Info)
#define IMimeInternational_ConvertBuffer(This,cpiSource,cpiDest,pIn,pOut,pcbRead) (This)->lpVtbl->ConvertBuffer(This,cpiSource,cpiDest,pIn,pOut,pcbRead)
#define IMimeInternational_ConvertString(This,cpiSource,cpiDest,pIn,pOut) (This)->lpVtbl->ConvertString(This,cpiSource,cpiDest,pIn,pOut)
#define IMimeInternational_MLANG_ConvertInetReset(This) (This)->lpVtbl->MLANG_ConvertInetReset(This)
#define IMimeInternational_MLANG_ConvertInetString(This,cpiSource,cpiDest,pSource,pnSizeOfSource,pDestination,pnDstSize) (This)->lpVtbl->MLANG_ConvertInetString(This,cpiSource,cpiDest,pSource,pnSizeOfSource,pDestination,pnDstSize)
#define IMimeInternational_Rfc1522Decode(This,pszValue,pszCharset,cchmax,ppszDecoded) (This)->lpVtbl->Rfc1522Decode(This,pszValue,pszCharset,cchmax,ppszDecoded)
#define IMimeInternational_Rfc1522Encode(This,pszValue,hCharset,ppszEncoded) (This)->lpVtbl->Rfc1522Encode(This,pszValue,hCharset,ppszEncoded)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeInternational_QueryInterface(IMimeInternational* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeInternational_AddRef(IMimeInternational* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeInternational_Release(IMimeInternational* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeInternational methods ***/
static inline HRESULT IMimeInternational_SetDefaultCharset(IMimeInternational* This,HCHARSET hCharset) {
    return This->lpVtbl->SetDefaultCharset(This,hCharset);
}
static inline HRESULT IMimeInternational_GetDefaultCharset(IMimeInternational* This,LPHCHARSET phCharset) {
    return This->lpVtbl->GetDefaultCharset(This,phCharset);
}
static inline HRESULT IMimeInternational_GetCodePageCharset(IMimeInternational* This,CODEPAGEID cpiCodePage,CHARSETTYPE ctCsetType,LPHCHARSET phCharset) {
    return This->lpVtbl->GetCodePageCharset(This,cpiCodePage,ctCsetType,phCharset);
}
static inline HRESULT IMimeInternational_FindCharset(IMimeInternational* This,LPCSTR pszCharset,LPHCHARSET phCharset) {
    return This->lpVtbl->FindCharset(This,pszCharset,phCharset);
}
static inline HRESULT IMimeInternational_GetCharsetInfo(IMimeInternational* This,HCHARSET hCharset,LPINETCSETINFO pCsetInfo) {
    return This->lpVtbl->GetCharsetInfo(This,hCharset,pCsetInfo);
}
static inline HRESULT IMimeInternational_GetCodePageInfo(IMimeInternational* This,CODEPAGEID cpiCodePage,LPCODEPAGEINFO pCodePageInfo) {
    return This->lpVtbl->GetCodePageInfo(This,cpiCodePage,pCodePageInfo);
}
static inline HRESULT IMimeInternational_CanConvertCodePages(IMimeInternational* This,CODEPAGEID cpiSource,CODEPAGEID cpiDest) {
    return This->lpVtbl->CanConvertCodePages(This,cpiSource,cpiDest);
}
static inline HRESULT IMimeInternational_DecodeHeader(IMimeInternational* This,HCHARSET hCharset,LPCSTR pszData,LPPROPVARIANT pDecoded,LPRFC1522INFO pRfc1522Info) {
    return This->lpVtbl->DecodeHeader(This,hCharset,pszData,pDecoded,pRfc1522Info);
}
static inline HRESULT IMimeInternational_EncodeHeader(IMimeInternational* This,HCHARSET hCharset,LPPROPVARIANT pData,LPSTR *ppszEncoded,LPRFC1522INFO pRfc1522Info) {
    return This->lpVtbl->EncodeHeader(This,hCharset,pData,ppszEncoded,pRfc1522Info);
}
static inline HRESULT IMimeInternational_ConvertBuffer(IMimeInternational* This,CODEPAGEID cpiSource,CODEPAGEID cpiDest,LPBLOB pIn,LPBLOB pOut,ULONG *pcbRead) {
    return This->lpVtbl->ConvertBuffer(This,cpiSource,cpiDest,pIn,pOut,pcbRead);
}
static inline HRESULT IMimeInternational_ConvertString(IMimeInternational* This,CODEPAGEID cpiSource,CODEPAGEID cpiDest,LPPROPVARIANT pIn,LPPROPVARIANT pOut) {
    return This->lpVtbl->ConvertString(This,cpiSource,cpiDest,pIn,pOut);
}
static inline HRESULT IMimeInternational_MLANG_ConvertInetReset(IMimeInternational* This) {
    return This->lpVtbl->MLANG_ConvertInetReset(This);
}
static inline HRESULT IMimeInternational_MLANG_ConvertInetString(IMimeInternational* This,CODEPAGEID cpiSource,CODEPAGEID cpiDest,LPCSTR pSource,int *pnSizeOfSource,LPSTR pDestination,int *pnDstSize) {
    return This->lpVtbl->MLANG_ConvertInetString(This,cpiSource,cpiDest,pSource,pnSizeOfSource,pDestination,pnDstSize);
}
static inline HRESULT IMimeInternational_Rfc1522Decode(IMimeInternational* This,LPCSTR pszValue,LPSTR pszCharset,ULONG cchmax,LPSTR *ppszDecoded) {
    return This->lpVtbl->Rfc1522Decode(This,pszValue,pszCharset,cchmax,ppszDecoded);
}
static inline HRESULT IMimeInternational_Rfc1522Encode(IMimeInternational* This,LPCSTR pszValue,HCHARSET hCharset,LPSTR *ppszEncoded) {
    return This->lpVtbl->Rfc1522Encode(This,pszValue,hCharset,ppszEncoded);
}
#endif
#endif

#endif


#endif  /* __IMimeInternational_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeSecurity interface
 */
#ifndef __IMimeSecurity_INTERFACE_DEFINED__
#define __IMimeSecurity_INTERFACE_DEFINED__

typedef IMimeSecurity *LPMIMESECURITY;
#ifdef __WINE_WINCRYPT_H
typedef PCCERT_CONTEXT PCX509CERT;
#else
typedef const void *PCX509CERT;
typedef void *HCERTSTORE;
#endif
typedef BLOB THUMBBLOB;
typedef void *HCAPICERTSTORE;
#define MST_NONE             0x00000000
#define MST_THIS_SIGN        0x00000001
#define MST_THIS_ENCRYPT     0x00000002
#define MST_BLOB_FLAG        0x00000004
#define MST_THIS_BLOBSIGN    (MST_BLOB_FLAG | MST_THIS_SIGN)
#define MST_CHILD_SIGN       0x00000100
#define MST_CHILD_ENCRYPT    0x00000200
#define MST_SUBMSG_SIGN      0x00001000
#define MST_SUBMSG_ENCRYPT   0x00002000
#define MST_RECEIPT_REQUEST  0x00010000
#define MST_CLASS_SMIME_V1   0x00000000
#define MST_CLASS_PGP        0x01000000
typedef enum tagCERTSTATE {
    CERTIFICATE_OK = 0,
    CERTIFICATE_NOT_PRESENT = 1,
    CERTIFICATE_EXPIRED = 2,
    CERTIFICATE_CHAIN_TOO_LONG = 3,
    CERTIFICATE_MISSING_ISSUER = 4,
    CERTIFICATE_CRL_LISTED = 5,
    CERTIFICATE_NOT_TRUSTED = 6,
    CERTIFICATE_INVALID = 7,
    CERTIFICATE_ERROR = 8,
    CERTIFICATE_NOPRINT = 9,
    CERTIFICATE_UNKNOWN = 10
} CERTSTATE;
typedef enum tagCERTNAMETYPE {
    SIMPLE = 0,
    OID = 1,
    X500 = 2
} CERTNAMETYPE;
typedef enum tagCERTDATAID {
    CDID_EMAIL = 0,
    CDID_MAX = 1
} CERTDATAID;
typedef struct tagX509CERTRESULT {
    DWORD cEntries;
    CERTSTATE *rgcs;
    PCX509CERT *rgpCert;
} X509CERTRESULT;
typedef struct tagX509CERTRESULT *PX509CERTRESULT;
typedef const X509CERTRESULT *PCX509CERTRESULT;
DEFINE_GUID(IID_IMimeSecurity, 0xc5588353, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c5588353-7f86-11d0-8252-00c04fd85ab4")
IMimeSecurity : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CheckInit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeMessage(
        IMimeMessageTree *pTree,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeBody(
        IMimeMessageTree *pTree,
        HBODY hEncodeRoot,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeMessage(
        IMimeMessageTree *pTree,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeBody(
        IMimeMessageTree *pTree,
        HBODY hDecodeRoot,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumCertificates(
        HCAPICERTSTORE hc,
        DWORD dwUsage,
        PCX509CERT pPrev,
        PCX509CERT *ppCert) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCertificateName(
        const PCX509CERT pX509Cert,
        const CERTNAMETYPE cn,
        LPSTR *ppszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMessageType(
        const HWND hwndParent,
        IMimeBody *pBody,
        DWORD *pdwSecType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCertData(
        const PCX509CERT pX509Cert,
        const CERTDATAID dataid,
        LPPROPVARIANT pValue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeSecurity, 0xc5588353, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeSecurityVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeSecurity *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeSecurity *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeSecurity *This);

    /*** IMimeSecurity methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeSecurity *This);

    HRESULT (STDMETHODCALLTYPE *CheckInit)(
        IMimeSecurity *This);

    HRESULT (STDMETHODCALLTYPE *EncodeMessage)(
        IMimeSecurity *This,
        IMimeMessageTree *pTree,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *EncodeBody)(
        IMimeSecurity *This,
        IMimeMessageTree *pTree,
        HBODY hEncodeRoot,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *DecodeMessage)(
        IMimeSecurity *This,
        IMimeMessageTree *pTree,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *DecodeBody)(
        IMimeSecurity *This,
        IMimeMessageTree *pTree,
        HBODY hDecodeRoot,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *EnumCertificates)(
        IMimeSecurity *This,
        HCAPICERTSTORE hc,
        DWORD dwUsage,
        PCX509CERT pPrev,
        PCX509CERT *ppCert);

    HRESULT (STDMETHODCALLTYPE *GetCertificateName)(
        IMimeSecurity *This,
        const PCX509CERT pX509Cert,
        const CERTNAMETYPE cn,
        LPSTR *ppszName);

    HRESULT (STDMETHODCALLTYPE *GetMessageType)(
        IMimeSecurity *This,
        const HWND hwndParent,
        IMimeBody *pBody,
        DWORD *pdwSecType);

    HRESULT (STDMETHODCALLTYPE *GetCertData)(
        IMimeSecurity *This,
        const PCX509CERT pX509Cert,
        const CERTDATAID dataid,
        LPPROPVARIANT pValue);

    END_INTERFACE
} IMimeSecurityVtbl;

interface IMimeSecurity {
    CONST_VTBL IMimeSecurityVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeSecurity_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeSecurity methods ***/
#define IMimeSecurity_InitNew(This) (This)->lpVtbl->InitNew(This)
#define IMimeSecurity_CheckInit(This) (This)->lpVtbl->CheckInit(This)
#define IMimeSecurity_EncodeMessage(This,pTree,dwFlags) (This)->lpVtbl->EncodeMessage(This,pTree,dwFlags)
#define IMimeSecurity_EncodeBody(This,pTree,hEncodeRoot,dwFlags) (This)->lpVtbl->EncodeBody(This,pTree,hEncodeRoot,dwFlags)
#define IMimeSecurity_DecodeMessage(This,pTree,dwFlags) (This)->lpVtbl->DecodeMessage(This,pTree,dwFlags)
#define IMimeSecurity_DecodeBody(This,pTree,hDecodeRoot,dwFlags) (This)->lpVtbl->DecodeBody(This,pTree,hDecodeRoot,dwFlags)
#define IMimeSecurity_EnumCertificates(This,hc,dwUsage,pPrev,ppCert) (This)->lpVtbl->EnumCertificates(This,hc,dwUsage,pPrev,ppCert)
#define IMimeSecurity_GetCertificateName(This,pX509Cert,cn,ppszName) (This)->lpVtbl->GetCertificateName(This,pX509Cert,cn,ppszName)
#define IMimeSecurity_GetMessageType(This,hwndParent,pBody,pdwSecType) (This)->lpVtbl->GetMessageType(This,hwndParent,pBody,pdwSecType)
#define IMimeSecurity_GetCertData(This,pX509Cert,dataid,pValue) (This)->lpVtbl->GetCertData(This,pX509Cert,dataid,pValue)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeSecurity_QueryInterface(IMimeSecurity* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeSecurity_AddRef(IMimeSecurity* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeSecurity_Release(IMimeSecurity* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeSecurity methods ***/
static inline HRESULT IMimeSecurity_InitNew(IMimeSecurity* This) {
    return This->lpVtbl->InitNew(This);
}
static inline HRESULT IMimeSecurity_CheckInit(IMimeSecurity* This) {
    return This->lpVtbl->CheckInit(This);
}
static inline HRESULT IMimeSecurity_EncodeMessage(IMimeSecurity* This,IMimeMessageTree *pTree,DWORD dwFlags) {
    return This->lpVtbl->EncodeMessage(This,pTree,dwFlags);
}
static inline HRESULT IMimeSecurity_EncodeBody(IMimeSecurity* This,IMimeMessageTree *pTree,HBODY hEncodeRoot,DWORD dwFlags) {
    return This->lpVtbl->EncodeBody(This,pTree,hEncodeRoot,dwFlags);
}
static inline HRESULT IMimeSecurity_DecodeMessage(IMimeSecurity* This,IMimeMessageTree *pTree,DWORD dwFlags) {
    return This->lpVtbl->DecodeMessage(This,pTree,dwFlags);
}
static inline HRESULT IMimeSecurity_DecodeBody(IMimeSecurity* This,IMimeMessageTree *pTree,HBODY hDecodeRoot,DWORD dwFlags) {
    return This->lpVtbl->DecodeBody(This,pTree,hDecodeRoot,dwFlags);
}
static inline HRESULT IMimeSecurity_EnumCertificates(IMimeSecurity* This,HCAPICERTSTORE hc,DWORD dwUsage,PCX509CERT pPrev,PCX509CERT *ppCert) {
    return This->lpVtbl->EnumCertificates(This,hc,dwUsage,pPrev,ppCert);
}
static inline HRESULT IMimeSecurity_GetCertificateName(IMimeSecurity* This,const PCX509CERT pX509Cert,const CERTNAMETYPE cn,LPSTR *ppszName) {
    return This->lpVtbl->GetCertificateName(This,pX509Cert,cn,ppszName);
}
static inline HRESULT IMimeSecurity_GetMessageType(IMimeSecurity* This,const HWND hwndParent,IMimeBody *pBody,DWORD *pdwSecType) {
    return This->lpVtbl->GetMessageType(This,hwndParent,pBody,pdwSecType);
}
static inline HRESULT IMimeSecurity_GetCertData(IMimeSecurity* This,const PCX509CERT pX509Cert,const CERTDATAID dataid,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetCertData(This,pX509Cert,dataid,pValue);
}
#endif
#endif

#endif


#endif  /* __IMimeSecurity_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumHeaderRows interface
 */
#ifndef __IMimeEnumHeaderRows_INTERFACE_DEFINED__
#define __IMimeEnumHeaderRows_INTERFACE_DEFINED__

typedef struct tagENUMHEADERROW {
    HHEADERROW hRow;
    LPSTR pszHeader;
    LPSTR pszData;
    ULONG cchData;
    DWORD_PTR dwReserved;
} ENUMHEADERROW;
typedef struct tagENUMHEADERROW *LPENUMHEADERROW;
DEFINE_GUID(IID_IMimeEnumHeaderRows, 0xc558834d, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c558834d-7f86-11d0-8252-00c04fd85ab4")
IMimeEnumHeaderRows : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG fetch,
        LPENUMHEADERROW row,
        ULONG *fetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG items) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimeEnumHeaderRows **rows) = 0;

    virtual HRESULT STDMETHODCALLTYPE Count(
        ULONG *pcItems) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEnumHeaderRows, 0xc558834d, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeEnumHeaderRowsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumHeaderRows *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumHeaderRows *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumHeaderRows *This);

    /*** IMimeEnumHeaderRows methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IMimeEnumHeaderRows *This,
        ULONG fetch,
        LPENUMHEADERROW row,
        ULONG *fetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IMimeEnumHeaderRows *This,
        ULONG items);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IMimeEnumHeaderRows *This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeEnumHeaderRows *This,
        IMimeEnumHeaderRows **rows);

    HRESULT (STDMETHODCALLTYPE *Count)(
        IMimeEnumHeaderRows *This,
        ULONG *pcItems);

    END_INTERFACE
} IMimeEnumHeaderRowsVtbl;

interface IMimeEnumHeaderRows {
    CONST_VTBL IMimeEnumHeaderRowsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEnumHeaderRows_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumHeaderRows_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumHeaderRows_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeEnumHeaderRows methods ***/
#define IMimeEnumHeaderRows_Next(This,fetch,row,fetched) (This)->lpVtbl->Next(This,fetch,row,fetched)
#define IMimeEnumHeaderRows_Skip(This,items) (This)->lpVtbl->Skip(This,items)
#define IMimeEnumHeaderRows_Reset(This) (This)->lpVtbl->Reset(This)
#define IMimeEnumHeaderRows_Clone(This,rows) (This)->lpVtbl->Clone(This,rows)
#define IMimeEnumHeaderRows_Count(This,pcItems) (This)->lpVtbl->Count(This,pcItems)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEnumHeaderRows_QueryInterface(IMimeEnumHeaderRows* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEnumHeaderRows_AddRef(IMimeEnumHeaderRows* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEnumHeaderRows_Release(IMimeEnumHeaderRows* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeEnumHeaderRows methods ***/
static inline HRESULT IMimeEnumHeaderRows_Next(IMimeEnumHeaderRows* This,ULONG fetch,LPENUMHEADERROW row,ULONG *fetched) {
    return This->lpVtbl->Next(This,fetch,row,fetched);
}
static inline HRESULT IMimeEnumHeaderRows_Skip(IMimeEnumHeaderRows* This,ULONG items) {
    return This->lpVtbl->Skip(This,items);
}
static inline HRESULT IMimeEnumHeaderRows_Reset(IMimeEnumHeaderRows* This) {
    return This->lpVtbl->Reset(This);
}
static inline HRESULT IMimeEnumHeaderRows_Clone(IMimeEnumHeaderRows* This,IMimeEnumHeaderRows **rows) {
    return This->lpVtbl->Clone(This,rows);
}
static inline HRESULT IMimeEnumHeaderRows_Count(IMimeEnumHeaderRows* This,ULONG *pcItems) {
    return This->lpVtbl->Count(This,pcItems);
}
#endif
#endif

#endif


#endif  /* __IMimeEnumHeaderRows_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeHeaderTable interface
 */
#ifndef __IMimeHeaderTable_INTERFACE_DEFINED__
#define __IMimeHeaderTable_INTERFACE_DEFINED__

typedef struct tagFINDHEADER {
    LPCSTR pszHeader;
    DWORD dwReserved;
} FINDHEADER;
typedef struct tagFINDHEADER *LPFINDHEADER;
typedef struct tagHEADERROWINFO {
    DWORD dwRowNumber;
    ULONG cboffStart;
    ULONG cboffColon;
    ULONG cboffEnd;
} HEADERROWINFO;
typedef struct tagHEADERROWINFO *LPHEADERROWINFO;
typedef enum tagHEADERTABLEFLAGS {
    HTF_NAMEINDATA = 0x1,
    HTF_ENUMHANDLESONLY = 0x2
} HEADERTABLEFLAGS;
DEFINE_GUID(IID_IMimeHeaderTable, 0xfd853cd1, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cd1-7f86-11d0-8252-00c04fd85ab4")
IMimeHeaderTable : public IPersistStream
{
    virtual HRESULT STDMETHODCALLTYPE FindFirstRow(
        LPFINDHEADER header,
        LPHHEADERROW row) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindNextRow(
        LPFINDHEADER header,
        LPHHEADERROW row) = 0;

    virtual HRESULT STDMETHODCALLTYPE CountRows(
        const char *header,
        ULONG *rows) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendRow(
        const char *header,
        DWORD flags,
        const char *data,
        ULONG count,
        LPHHEADERROW row) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteRow(
        HHEADERROW row) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRowData(
        HHEADERROW row,
        DWORD flags,
        char **data,
        ULONG *len) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRowData(
        HHEADERROW row,
        DWORD flags,
        const char *data,
        ULONG len) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRowInfo(
        HHEADERROW row,
        LPHEADERROWINFO info) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRowNumber(
        HHEADERROW row,
        DWORD number) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumRows(
        const char *header,
        DWORD flags,
        IMimeEnumHeaderRows **rows) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimeHeaderTable **table) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        REFIID riid,
        void *object) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeHeaderTable, 0xfd853cd1, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeHeaderTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeHeaderTable *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeHeaderTable *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeHeaderTable *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeHeaderTable *This,
        CLSID *pClassID);

    /*** IPersistStream methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeHeaderTable *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeHeaderTable *This,
        IStream *pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeHeaderTable *This,
        IStream *pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeHeaderTable *This,
        ULARGE_INTEGER *pcbSize);

    /*** IMimeHeaderTable methods ***/
    HRESULT (STDMETHODCALLTYPE *FindFirstRow)(
        IMimeHeaderTable *This,
        LPFINDHEADER header,
        LPHHEADERROW row);

    HRESULT (STDMETHODCALLTYPE *FindNextRow)(
        IMimeHeaderTable *This,
        LPFINDHEADER header,
        LPHHEADERROW row);

    HRESULT (STDMETHODCALLTYPE *CountRows)(
        IMimeHeaderTable *This,
        const char *header,
        ULONG *rows);

    HRESULT (STDMETHODCALLTYPE *AppendRow)(
        IMimeHeaderTable *This,
        const char *header,
        DWORD flags,
        const char *data,
        ULONG count,
        LPHHEADERROW row);

    HRESULT (STDMETHODCALLTYPE *DeleteRow)(
        IMimeHeaderTable *This,
        HHEADERROW row);

    HRESULT (STDMETHODCALLTYPE *GetRowData)(
        IMimeHeaderTable *This,
        HHEADERROW row,
        DWORD flags,
        char **data,
        ULONG *len);

    HRESULT (STDMETHODCALLTYPE *SetRowData)(
        IMimeHeaderTable *This,
        HHEADERROW row,
        DWORD flags,
        const char *data,
        ULONG len);

    HRESULT (STDMETHODCALLTYPE *GetRowInfo)(
        IMimeHeaderTable *This,
        HHEADERROW row,
        LPHEADERROWINFO info);

    HRESULT (STDMETHODCALLTYPE *SetRowNumber)(
        IMimeHeaderTable *This,
        HHEADERROW row,
        DWORD number);

    HRESULT (STDMETHODCALLTYPE *EnumRows)(
        IMimeHeaderTable *This,
        const char *header,
        DWORD flags,
        IMimeEnumHeaderRows **rows);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeHeaderTable *This,
        IMimeHeaderTable **table);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeHeaderTable *This,
        REFIID riid,
        void *object);

    END_INTERFACE
} IMimeHeaderTableVtbl;

interface IMimeHeaderTable {
    CONST_VTBL IMimeHeaderTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeHeaderTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeHeaderTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeHeaderTable_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeHeaderTable_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStream methods ***/
#define IMimeHeaderTable_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeHeaderTable_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeHeaderTable_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeHeaderTable_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
/*** IMimeHeaderTable methods ***/
#define IMimeHeaderTable_FindFirstRow(This,header,row) (This)->lpVtbl->FindFirstRow(This,header,row)
#define IMimeHeaderTable_FindNextRow(This,header,row) (This)->lpVtbl->FindNextRow(This,header,row)
#define IMimeHeaderTable_CountRows(This,header,rows) (This)->lpVtbl->CountRows(This,header,rows)
#define IMimeHeaderTable_AppendRow(This,header,flags,data,count,row) (This)->lpVtbl->AppendRow(This,header,flags,data,count,row)
#define IMimeHeaderTable_DeleteRow(This,row) (This)->lpVtbl->DeleteRow(This,row)
#define IMimeHeaderTable_GetRowData(This,row,flags,data,len) (This)->lpVtbl->GetRowData(This,row,flags,data,len)
#define IMimeHeaderTable_SetRowData(This,row,flags,data,len) (This)->lpVtbl->SetRowData(This,row,flags,data,len)
#define IMimeHeaderTable_GetRowInfo(This,row,info) (This)->lpVtbl->GetRowInfo(This,row,info)
#define IMimeHeaderTable_SetRowNumber(This,row,number) (This)->lpVtbl->SetRowNumber(This,row,number)
#define IMimeHeaderTable_EnumRows(This,header,flags,rows) (This)->lpVtbl->EnumRows(This,header,flags,rows)
#define IMimeHeaderTable_Clone(This,table) (This)->lpVtbl->Clone(This,table)
#define IMimeHeaderTable_BindToObject(This,riid,object) (This)->lpVtbl->BindToObject(This,riid,object)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeHeaderTable_QueryInterface(IMimeHeaderTable* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeHeaderTable_AddRef(IMimeHeaderTable* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeHeaderTable_Release(IMimeHeaderTable* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IMimeHeaderTable_GetClassID(IMimeHeaderTable* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStream methods ***/
static inline HRESULT IMimeHeaderTable_IsDirty(IMimeHeaderTable* This) {
    return This->lpVtbl->IsDirty(This);
}
static inline HRESULT IMimeHeaderTable_Load(IMimeHeaderTable* This,IStream *pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static inline HRESULT IMimeHeaderTable_Save(IMimeHeaderTable* This,IStream *pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static inline HRESULT IMimeHeaderTable_GetSizeMax(IMimeHeaderTable* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
/*** IMimeHeaderTable methods ***/
static inline HRESULT IMimeHeaderTable_FindFirstRow(IMimeHeaderTable* This,LPFINDHEADER header,LPHHEADERROW row) {
    return This->lpVtbl->FindFirstRow(This,header,row);
}
static inline HRESULT IMimeHeaderTable_FindNextRow(IMimeHeaderTable* This,LPFINDHEADER header,LPHHEADERROW row) {
    return This->lpVtbl->FindNextRow(This,header,row);
}
static inline HRESULT IMimeHeaderTable_CountRows(IMimeHeaderTable* This,const char *header,ULONG *rows) {
    return This->lpVtbl->CountRows(This,header,rows);
}
static inline HRESULT IMimeHeaderTable_AppendRow(IMimeHeaderTable* This,const char *header,DWORD flags,const char *data,ULONG count,LPHHEADERROW row) {
    return This->lpVtbl->AppendRow(This,header,flags,data,count,row);
}
static inline HRESULT IMimeHeaderTable_DeleteRow(IMimeHeaderTable* This,HHEADERROW row) {
    return This->lpVtbl->DeleteRow(This,row);
}
static inline HRESULT IMimeHeaderTable_GetRowData(IMimeHeaderTable* This,HHEADERROW row,DWORD flags,char **data,ULONG *len) {
    return This->lpVtbl->GetRowData(This,row,flags,data,len);
}
static inline HRESULT IMimeHeaderTable_SetRowData(IMimeHeaderTable* This,HHEADERROW row,DWORD flags,const char *data,ULONG len) {
    return This->lpVtbl->SetRowData(This,row,flags,data,len);
}
static inline HRESULT IMimeHeaderTable_GetRowInfo(IMimeHeaderTable* This,HHEADERROW row,LPHEADERROWINFO info) {
    return This->lpVtbl->GetRowInfo(This,row,info);
}
static inline HRESULT IMimeHeaderTable_SetRowNumber(IMimeHeaderTable* This,HHEADERROW row,DWORD number) {
    return This->lpVtbl->SetRowNumber(This,row,number);
}
static inline HRESULT IMimeHeaderTable_EnumRows(IMimeHeaderTable* This,const char *header,DWORD flags,IMimeEnumHeaderRows **rows) {
    return This->lpVtbl->EnumRows(This,header,flags,rows);
}
static inline HRESULT IMimeHeaderTable_Clone(IMimeHeaderTable* This,IMimeHeaderTable **table) {
    return This->lpVtbl->Clone(This,table);
}
static inline HRESULT IMimeHeaderTable_BindToObject(IMimeHeaderTable* This,REFIID riid,void *object) {
    return This->lpVtbl->BindToObject(This,riid,object);
}
#endif
#endif

#endif


#endif  /* __IMimeHeaderTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimePropertySchema interface
 */
#ifndef __IMimePropertySchema_INTERFACE_DEFINED__
#define __IMimePropertySchema_INTERFACE_DEFINED__

typedef IMimePropertySchema *LPMIMEPROPERTYSCHEMA;
typedef enum tagMIMEPROPFLAGS {
    MPF_INETCSET = 0x1,
    MPF_RFC1522 = 0x2,
    MPF_ADDRESS = 0x4,
    MPF_HASPARAMS = 0x8,
    MPF_MIME = 0x10,
    MPF_READONLY = 0x20
} MIMEPROPFLAGS;
DEFINE_GUID(IID_IMimePropertySchema, 0xfd853cec, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cec-7f86-11d0-8252-00c04fd85ab4")
IMimePropertySchema : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE RegisterProperty(
        const char *name,
        DWORD flags,
        DWORD rownumber,
        VARTYPE vtdefault,
        DWORD *propid) = 0;

    virtual HRESULT STDMETHODCALLTYPE ModifyProperty(
        const char *name,
        DWORD flags,
        DWORD rownumber,
        VARTYPE vtdefault) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyId(
        const char *name,
        DWORD *propid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyName(
        DWORD propid,
        char **name) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterAddressType(
        const char *name,
        DWORD *adrtype) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimePropertySchema, 0xfd853cec, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimePropertySchemaVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimePropertySchema *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimePropertySchema *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimePropertySchema *This);

    /*** IMimePropertySchema methods ***/
    HRESULT (STDMETHODCALLTYPE *RegisterProperty)(
        IMimePropertySchema *This,
        const char *name,
        DWORD flags,
        DWORD rownumber,
        VARTYPE vtdefault,
        DWORD *propid);

    HRESULT (STDMETHODCALLTYPE *ModifyProperty)(
        IMimePropertySchema *This,
        const char *name,
        DWORD flags,
        DWORD rownumber,
        VARTYPE vtdefault);

    HRESULT (STDMETHODCALLTYPE *GetPropertyId)(
        IMimePropertySchema *This,
        const char *name,
        DWORD *propid);

    HRESULT (STDMETHODCALLTYPE *GetPropertyName)(
        IMimePropertySchema *This,
        DWORD propid,
        char **name);

    HRESULT (STDMETHODCALLTYPE *RegisterAddressType)(
        IMimePropertySchema *This,
        const char *name,
        DWORD *adrtype);

    END_INTERFACE
} IMimePropertySchemaVtbl;

interface IMimePropertySchema {
    CONST_VTBL IMimePropertySchemaVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimePropertySchema_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimePropertySchema_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimePropertySchema_Release(This) (This)->lpVtbl->Release(This)
/*** IMimePropertySchema methods ***/
#define IMimePropertySchema_RegisterProperty(This,name,flags,rownumber,vtdefault,propid) (This)->lpVtbl->RegisterProperty(This,name,flags,rownumber,vtdefault,propid)
#define IMimePropertySchema_ModifyProperty(This,name,flags,rownumber,vtdefault) (This)->lpVtbl->ModifyProperty(This,name,flags,rownumber,vtdefault)
#define IMimePropertySchema_GetPropertyId(This,name,propid) (This)->lpVtbl->GetPropertyId(This,name,propid)
#define IMimePropertySchema_GetPropertyName(This,propid,name) (This)->lpVtbl->GetPropertyName(This,propid,name)
#define IMimePropertySchema_RegisterAddressType(This,name,adrtype) (This)->lpVtbl->RegisterAddressType(This,name,adrtype)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimePropertySchema_QueryInterface(IMimePropertySchema* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimePropertySchema_AddRef(IMimePropertySchema* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimePropertySchema_Release(IMimePropertySchema* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimePropertySchema methods ***/
static inline HRESULT IMimePropertySchema_RegisterProperty(IMimePropertySchema* This,const char *name,DWORD flags,DWORD rownumber,VARTYPE vtdefault,DWORD *propid) {
    return This->lpVtbl->RegisterProperty(This,name,flags,rownumber,vtdefault,propid);
}
static inline HRESULT IMimePropertySchema_ModifyProperty(IMimePropertySchema* This,const char *name,DWORD flags,DWORD rownumber,VARTYPE vtdefault) {
    return This->lpVtbl->ModifyProperty(This,name,flags,rownumber,vtdefault);
}
static inline HRESULT IMimePropertySchema_GetPropertyId(IMimePropertySchema* This,const char *name,DWORD *propid) {
    return This->lpVtbl->GetPropertyId(This,name,propid);
}
static inline HRESULT IMimePropertySchema_GetPropertyName(IMimePropertySchema* This,DWORD propid,char **name) {
    return This->lpVtbl->GetPropertyName(This,propid,name);
}
static inline HRESULT IMimePropertySchema_RegisterAddressType(IMimePropertySchema* This,const char *name,DWORD *adrtype) {
    return This->lpVtbl->RegisterAddressType(This,name,adrtype);
}
#endif
#endif

#endif


#endif  /* __IMimePropertySchema_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimePropertySet interface
 */
#ifndef __IMimePropertySet_INTERFACE_DEFINED__
#define __IMimePropertySet_INTERFACE_DEFINED__

typedef IMimePropertySet *LPMIMEPROPERTYSET;
#define PDF_ENCODED              0x00000001
#define PDF_NAMEINDATA           0x00000002
#define PDF_HEADERFORMAT        (0x00000004 | PDF_ENCODED)
#define PDF_NOCOMMENTS           0x00000008
#define PDF_SAVENOENCODE         0x00000010
#define PDF_VECTOR               0x00000020
typedef struct tagMIMEPARAMINFO {
    LPSTR pszName;
    LPSTR pszData;
} MIMEPARAMINFO;
typedef struct tagMIMEPARAMINFO *LPMIMEPARAMINFO;
typedef enum tagPROPINFOMASK {
    PIM_CHARSET = 0x1,
    PIM_ENCODINGTYPE = 0x2,
    PIM_ROWNUMBER = 0x4,
    PIM_FLAGS = 0x8,
    PIM_PROPID = 0x10,
    PIM_VALUES = 0x20,
    PIM_VTDEFAULT = 0x40,
    PIM_VTCURRENT = 0x80
} PROPINFOMASK;
typedef struct tagMIMEPROPINFO {
    DWORD dwMask;
    HCHARSET hCharset;
    ENCODINGTYPE ietEncoding;
    DWORD dwRowNumber;
    DWORD dwFlags;
    DWORD dwPropId;
    DWORD cValues;
    VARTYPE vtDefault;
    VARTYPE vtCurrent;
} MIMEPROPINFO;
typedef struct tagMIMEPROPINFO *LPMIMEPROPINFO;
typedef const MIMEPROPINFO *LPCMIMEPROPINFO;
#ifdef WINE_NO_UNICODE_MACROS
#undef GetProp
#undef SetProp
#undef EnumProps
#endif
#define EPF_NONAME 0x00000001
DEFINE_GUID(IID_IMimePropertySet, 0xfd853cd3, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cd3-7f86-11d0-8252-00c04fd85ab4")
IMimePropertySet : public IPersistStreamInit
{
    virtual HRESULT STDMETHODCALLTYPE GetPropInfo(
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropInfo(
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteProp(
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyProps(
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveProps(
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteExcept(
        ULONG cNames,
        LPCSTR *prgszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryProp(
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCharset(
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetParameters(
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsContentType(
        LPCSTR pszPriType,
        LPCSTR pszSubType) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimePropertySet **ppPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOption(
        const TYPEDID oid,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOption(
        const TYPEDID oid,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumProps(
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimePropertySet, 0xfd853cd3, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimePropertySetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimePropertySet *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimePropertySet *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimePropertySet *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimePropertySet *This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimePropertySet *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimePropertySet *This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimePropertySet *This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimePropertySet *This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimePropertySet *This);

    /*** IMimePropertySet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropInfo)(
        IMimePropertySet *This,
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *SetPropInfo)(
        IMimePropertySet *This,
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimePropertySet *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimePropertySet *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *AppendProp)(
        IMimePropertySet *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimePropertySet *This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *CopyProps)(
        IMimePropertySet *This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *MoveProps)(
        IMimePropertySet *This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *DeleteExcept)(
        IMimePropertySet *This,
        ULONG cNames,
        LPCSTR *prgszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimePropertySet *This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimePropertySet *This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimePropertySet *This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *GetParameters)(
        IMimePropertySet *This,
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimePropertySet *This,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimePropertySet *This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimePropertySet *This,
        IMimePropertySet **ppPropertySet);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimePropertySet *This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimePropertySet *This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *EnumProps)(
        IMimePropertySet *This,
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum);

    END_INTERFACE
} IMimePropertySetVtbl;

interface IMimePropertySet {
    CONST_VTBL IMimePropertySetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimePropertySet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimePropertySet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimePropertySet_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimePropertySet_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimePropertySet_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimePropertySet_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimePropertySet_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimePropertySet_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimePropertySet_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimePropertySet methods ***/
#define IMimePropertySet_GetPropInfo(This,pszName,pInfo) (This)->lpVtbl->GetPropInfo(This,pszName,pInfo)
#define IMimePropertySet_SetPropInfo(This,pszName,pInfo) (This)->lpVtbl->SetPropInfo(This,pszName,pInfo)
#define IMimePropertySet_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_AppendProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->AppendProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimePropertySet_CopyProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet)
#define IMimePropertySet_MoveProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet)
#define IMimePropertySet_DeleteExcept(This,cNames,prgszName) (This)->lpVtbl->DeleteExcept(This,cNames,prgszName)
#define IMimePropertySet_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimePropertySet_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimePropertySet_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimePropertySet_GetParameters(This,pszName,pcParams,pprgParam) (This)->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam)
#define IMimePropertySet_IsContentType(This,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,pszPriType,pszSubType)
#define IMimePropertySet_BindToObject(This,riid,ppvObject) (This)->lpVtbl->BindToObject(This,riid,ppvObject)
#define IMimePropertySet_Clone(This,ppPropertySet) (This)->lpVtbl->Clone(This,ppPropertySet)
#define IMimePropertySet_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimePropertySet_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#define IMimePropertySet_EnumProps(This,dwFlags,ppEnum) (This)->lpVtbl->EnumProps(This,dwFlags,ppEnum)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimePropertySet_QueryInterface(IMimePropertySet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimePropertySet_AddRef(IMimePropertySet* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimePropertySet_Release(IMimePropertySet* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IMimePropertySet_GetClassID(IMimePropertySet* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStreamInit methods ***/
static inline HRESULT IMimePropertySet_IsDirty(IMimePropertySet* This) {
    return This->lpVtbl->IsDirty(This);
}
static inline HRESULT IMimePropertySet_Load(IMimePropertySet* This,LPSTREAM pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static inline HRESULT IMimePropertySet_Save(IMimePropertySet* This,LPSTREAM pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static inline HRESULT IMimePropertySet_GetSizeMax(IMimePropertySet* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
static inline HRESULT IMimePropertySet_InitNew(IMimePropertySet* This) {
    return This->lpVtbl->InitNew(This);
}
/*** IMimePropertySet methods ***/
static inline HRESULT IMimePropertySet_GetPropInfo(IMimePropertySet* This,LPCSTR pszName,LPMIMEPROPINFO pInfo) {
    return This->lpVtbl->GetPropInfo(This,pszName,pInfo);
}
static inline HRESULT IMimePropertySet_SetPropInfo(IMimePropertySet* This,LPCSTR pszName,LPCMIMEPROPINFO pInfo) {
    return This->lpVtbl->SetPropInfo(This,pszName,pInfo);
}
static inline HRESULT IMimePropertySet_GetProp(IMimePropertySet* This,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimePropertySet_SetProp(IMimePropertySet* This,LPCSTR pszName,DWORD dwFlags,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimePropertySet_AppendProp(IMimePropertySet* This,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->AppendProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimePropertySet_DeleteProp(IMimePropertySet* This,LPCSTR pszName) {
    return This->lpVtbl->DeleteProp(This,pszName);
}
static inline HRESULT IMimePropertySet_CopyProps(IMimePropertySet* This,ULONG cNames,LPCSTR *prgszName,IMimePropertySet *pPropertySet) {
    return This->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet);
}
static inline HRESULT IMimePropertySet_MoveProps(IMimePropertySet* This,ULONG cNames,LPCSTR *prgszName,IMimePropertySet *pPropertySet) {
    return This->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet);
}
static inline HRESULT IMimePropertySet_DeleteExcept(IMimePropertySet* This,ULONG cNames,LPCSTR *prgszName) {
    return This->lpVtbl->DeleteExcept(This,cNames,prgszName);
}
static inline HRESULT IMimePropertySet_QueryProp(IMimePropertySet* This,LPCSTR pszName,LPCSTR pszCriteria,boolean fSubString,boolean fCaseSensitive) {
    return This->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive);
}
static inline HRESULT IMimePropertySet_GetCharset(IMimePropertySet* This,LPHCHARSET phCharset) {
    return This->lpVtbl->GetCharset(This,phCharset);
}
static inline HRESULT IMimePropertySet_SetCharset(IMimePropertySet* This,HCHARSET hCharset,CSETAPPLYTYPE applytype) {
    return This->lpVtbl->SetCharset(This,hCharset,applytype);
}
static inline HRESULT IMimePropertySet_GetParameters(IMimePropertySet* This,LPCSTR pszName,ULONG *pcParams,LPMIMEPARAMINFO *pprgParam) {
    return This->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam);
}
static inline HRESULT IMimePropertySet_IsContentType(IMimePropertySet* This,LPCSTR pszPriType,LPCSTR pszSubType) {
    return This->lpVtbl->IsContentType(This,pszPriType,pszSubType);
}
static inline HRESULT IMimePropertySet_BindToObject(IMimePropertySet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->BindToObject(This,riid,ppvObject);
}
static inline HRESULT IMimePropertySet_Clone(IMimePropertySet* This,IMimePropertySet **ppPropertySet) {
    return This->lpVtbl->Clone(This,ppPropertySet);
}
static inline HRESULT IMimePropertySet_SetOption(IMimePropertySet* This,const TYPEDID oid,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetOption(This,oid,pValue);
}
static inline HRESULT IMimePropertySet_GetOption(IMimePropertySet* This,const TYPEDID oid,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetOption(This,oid,pValue);
}
static inline HRESULT IMimePropertySet_EnumProps(IMimePropertySet* This,DWORD dwFlags,IMimeEnumProperties **ppEnum) {
    return This->lpVtbl->EnumProps(This,dwFlags,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IMimePropertySet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeAddressTable interface
 */
#ifndef __IMimeAddressTable_INTERFACE_DEFINED__
#define __IMimeAddressTable_INTERFACE_DEFINED__

typedef IMimeAddressTable *LPMIMEADDRESSTABLE;
typedef void *HADDRESS;
typedef HADDRESS *LPHADDRESS;
typedef DWORD IADDRESSTYPE;
typedef enum tagADDRESSFORMAT {
    AFT_DISPLAY_FRIENDLY = 0,
    AFT_DISPLAY_EMAIL = 1,
    AFT_DISPLAY_BOTH = 2,
    AFT_RFC822_DECODED = 3,
    AFT_RFC822_ENCODED = 4,
    AFT_RFC822_TRANSMIT = 5
} ADDRESSFORMAT;
#define IAT_UNKNOWN              0x00000000
#define IAT_FROM                 0x00000001
#define IAT_SENDER               0x00000002
#define IAT_TO                   0x00000004
#define IAT_CC                   0x00000008
#define IAT_BCC                  0x00000010
#define IAT_REPLYTO              0x00000020
#define IAT_RETURNPATH           0x00000040
#define IAT_RETRCPTTO            0x00000080
#define IAT_RR                   0x00000100
#define IAT_APPARTO              0x00000200
#define IAT_DISP_NOTIFICATION_TO 0x00000400
#define IAT_ALL                  0xffffffff
#define IAT_KNOWN                (IAT_FROM | IAT_TO | IAT_CC | IAT_BCC | IAT_REPLYTO | IAT_SENDER)
#define IAT_RECIPS               (IAT_TO | IAT_CC | IAT_BCC)
typedef struct tagADDRESSPROPS {
    DWORD dwProps;
    HADDRESS hAddress;
    ENCODINGTYPE ietFriendly;
    HCHARSET hCharset;
    DWORD dwAdrType;
    LPSTR pszFriendly;
    LPWSTR pwszReserved;
    LPSTR pszEmail;
    CERTSTATE certstate;
    THUMBBLOB tbSigning;
    THUMBBLOB tbEncryption;
    DWORD dwCookie;
    DWORD dwReserved1;
    DWORD dwReserved2;
} ADDRESSPROPS;
typedef struct tagADDRESSPROPS *LPADDRESSPROPS;
#define IAP_CHARSET              0x00000001
#define IAP_HANDLE               0x00000002
#define IAP_ADRTYPE              0x00000004
#define IAP_FRIENDLY             0x00000008
#define IAP_EMAIL                0x00000020
#define IAP_CERTSTATE            0x00000100
#define IAP_SIGNING_PRINT        0x00000200
#define IAP_ENCRYPTION_PRINT     0x00000400
#define IAP_ENCODING             0x00000800
#define IAP_COOKIE               0x00001000
#define IAP_FRIENDLYW            0x00002000
#define IAP_ALL                  0xffffffff
typedef struct tagADDRESSLIST {
    ULONG cAdrs;
    LPADDRESSPROPS prgAdr;
} ADDRESSLIST;
typedef struct tagADDRESSLIST *LPADDRESSLIST;
DEFINE_GUID(IID_IMimeAddressTable, 0xc558834a, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c558834a-7f86-11d0-8252-00c04fd85ab4")
IMimeAddressTable : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Append(
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *friendly,
        const char *email,
        HADDRESS *address) = 0;

    virtual HRESULT STDMETHODCALLTYPE Insert(
        ADDRESSPROPS *addressprop,
        HADDRESS *address) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProps(
        HADDRESS address,
        ADDRESSPROPS *addressprop) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProps(
        HADDRESS address,
        ADDRESSPROPS *addressprop) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSender(
        ADDRESSPROPS *addressprop) = 0;

    virtual HRESULT STDMETHODCALLTYPE CountTypes(
        DWORD addrtype,
        ULONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTypes(
        DWORD addrtype,
        DWORD dwProps,
        ADDRESSLIST *list) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumTypes(
        DWORD addrtype,
        DWORD props,
        IMimeEnumAddressTypes **types) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        HADDRESS hAddress) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteTypes(
        DWORD addrtype) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        DWORD addrtype,
        ADDRESSFORMAT addrformat,
        char **format) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendRfc822(
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *rfcaddr) = 0;

    virtual HRESULT STDMETHODCALLTYPE ParseRfc822(
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *rfcaddr,
        ADDRESSLIST *list) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimeAddressTable **table) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        REFIID riid,
        void **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeAddressTable, 0xc558834a, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeAddressTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeAddressTable *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeAddressTable *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeAddressTable *This);

    /*** IMimeAddressTable methods ***/
    HRESULT (STDMETHODCALLTYPE *Append)(
        IMimeAddressTable *This,
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *friendly,
        const char *email,
        HADDRESS *address);

    HRESULT (STDMETHODCALLTYPE *Insert)(
        IMimeAddressTable *This,
        ADDRESSPROPS *addressprop,
        HADDRESS *address);

    HRESULT (STDMETHODCALLTYPE *SetProps)(
        IMimeAddressTable *This,
        HADDRESS address,
        ADDRESSPROPS *addressprop);

    HRESULT (STDMETHODCALLTYPE *GetProps)(
        IMimeAddressTable *This,
        HADDRESS address,
        ADDRESSPROPS *addressprop);

    HRESULT (STDMETHODCALLTYPE *GetSender)(
        IMimeAddressTable *This,
        ADDRESSPROPS *addressprop);

    HRESULT (STDMETHODCALLTYPE *CountTypes)(
        IMimeAddressTable *This,
        DWORD addrtype,
        ULONG *count);

    HRESULT (STDMETHODCALLTYPE *GetTypes)(
        IMimeAddressTable *This,
        DWORD addrtype,
        DWORD dwProps,
        ADDRESSLIST *list);

    HRESULT (STDMETHODCALLTYPE *EnumTypes)(
        IMimeAddressTable *This,
        DWORD addrtype,
        DWORD props,
        IMimeEnumAddressTypes **types);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        IMimeAddressTable *This,
        HADDRESS hAddress);

    HRESULT (STDMETHODCALLTYPE *DeleteTypes)(
        IMimeAddressTable *This,
        DWORD addrtype);

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        IMimeAddressTable *This,
        DWORD addrtype,
        ADDRESSFORMAT addrformat,
        char **format);

    HRESULT (STDMETHODCALLTYPE *AppendRfc822)(
        IMimeAddressTable *This,
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *rfcaddr);

    HRESULT (STDMETHODCALLTYPE *ParseRfc822)(
        IMimeAddressTable *This,
        DWORD addrtype,
        ENCODINGTYPE encoding,
        const char *rfcaddr,
        ADDRESSLIST *list);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeAddressTable *This,
        IMimeAddressTable **table);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeAddressTable *This,
        REFIID riid,
        void **obj);

    END_INTERFACE
} IMimeAddressTableVtbl;

interface IMimeAddressTable {
    CONST_VTBL IMimeAddressTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeAddressTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeAddressTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeAddressTable_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeAddressTable methods ***/
#define IMimeAddressTable_Append(This,addrtype,encoding,friendly,email,address) (This)->lpVtbl->Append(This,addrtype,encoding,friendly,email,address)
#define IMimeAddressTable_Insert(This,addressprop,address) (This)->lpVtbl->Insert(This,addressprop,address)
#define IMimeAddressTable_SetProps(This,address,addressprop) (This)->lpVtbl->SetProps(This,address,addressprop)
#define IMimeAddressTable_GetProps(This,address,addressprop) (This)->lpVtbl->GetProps(This,address,addressprop)
#define IMimeAddressTable_GetSender(This,addressprop) (This)->lpVtbl->GetSender(This,addressprop)
#define IMimeAddressTable_CountTypes(This,addrtype,count) (This)->lpVtbl->CountTypes(This,addrtype,count)
#define IMimeAddressTable_GetTypes(This,addrtype,dwProps,list) (This)->lpVtbl->GetTypes(This,addrtype,dwProps,list)
#define IMimeAddressTable_EnumTypes(This,addrtype,props,types) (This)->lpVtbl->EnumTypes(This,addrtype,props,types)
#define IMimeAddressTable_Delete(This,hAddress) (This)->lpVtbl->Delete(This,hAddress)
#define IMimeAddressTable_DeleteTypes(This,addrtype) (This)->lpVtbl->DeleteTypes(This,addrtype)
#define IMimeAddressTable_GetFormat(This,addrtype,addrformat,format) (This)->lpVtbl->GetFormat(This,addrtype,addrformat,format)
#define IMimeAddressTable_AppendRfc822(This,addrtype,encoding,rfcaddr) (This)->lpVtbl->AppendRfc822(This,addrtype,encoding,rfcaddr)
#define IMimeAddressTable_ParseRfc822(This,addrtype,encoding,rfcaddr,list) (This)->lpVtbl->ParseRfc822(This,addrtype,encoding,rfcaddr,list)
#define IMimeAddressTable_Clone(This,table) (This)->lpVtbl->Clone(This,table)
#define IMimeAddressTable_BindToObject(This,riid,obj) (This)->lpVtbl->BindToObject(This,riid,obj)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeAddressTable_QueryInterface(IMimeAddressTable* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeAddressTable_AddRef(IMimeAddressTable* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeAddressTable_Release(IMimeAddressTable* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeAddressTable methods ***/
static inline HRESULT IMimeAddressTable_Append(IMimeAddressTable* This,DWORD addrtype,ENCODINGTYPE encoding,const char *friendly,const char *email,HADDRESS *address) {
    return This->lpVtbl->Append(This,addrtype,encoding,friendly,email,address);
}
static inline HRESULT IMimeAddressTable_Insert(IMimeAddressTable* This,ADDRESSPROPS *addressprop,HADDRESS *address) {
    return This->lpVtbl->Insert(This,addressprop,address);
}
static inline HRESULT IMimeAddressTable_SetProps(IMimeAddressTable* This,HADDRESS address,ADDRESSPROPS *addressprop) {
    return This->lpVtbl->SetProps(This,address,addressprop);
}
static inline HRESULT IMimeAddressTable_GetProps(IMimeAddressTable* This,HADDRESS address,ADDRESSPROPS *addressprop) {
    return This->lpVtbl->GetProps(This,address,addressprop);
}
static inline HRESULT IMimeAddressTable_GetSender(IMimeAddressTable* This,ADDRESSPROPS *addressprop) {
    return This->lpVtbl->GetSender(This,addressprop);
}
static inline HRESULT IMimeAddressTable_CountTypes(IMimeAddressTable* This,DWORD addrtype,ULONG *count) {
    return This->lpVtbl->CountTypes(This,addrtype,count);
}
static inline HRESULT IMimeAddressTable_GetTypes(IMimeAddressTable* This,DWORD addrtype,DWORD dwProps,ADDRESSLIST *list) {
    return This->lpVtbl->GetTypes(This,addrtype,dwProps,list);
}
static inline HRESULT IMimeAddressTable_EnumTypes(IMimeAddressTable* This,DWORD addrtype,DWORD props,IMimeEnumAddressTypes **types) {
    return This->lpVtbl->EnumTypes(This,addrtype,props,types);
}
static inline HRESULT IMimeAddressTable_Delete(IMimeAddressTable* This,HADDRESS hAddress) {
    return This->lpVtbl->Delete(This,hAddress);
}
static inline HRESULT IMimeAddressTable_DeleteTypes(IMimeAddressTable* This,DWORD addrtype) {
    return This->lpVtbl->DeleteTypes(This,addrtype);
}
static inline HRESULT IMimeAddressTable_GetFormat(IMimeAddressTable* This,DWORD addrtype,ADDRESSFORMAT addrformat,char **format) {
    return This->lpVtbl->GetFormat(This,addrtype,addrformat,format);
}
static inline HRESULT IMimeAddressTable_AppendRfc822(IMimeAddressTable* This,DWORD addrtype,ENCODINGTYPE encoding,const char *rfcaddr) {
    return This->lpVtbl->AppendRfc822(This,addrtype,encoding,rfcaddr);
}
static inline HRESULT IMimeAddressTable_ParseRfc822(IMimeAddressTable* This,DWORD addrtype,ENCODINGTYPE encoding,const char *rfcaddr,ADDRESSLIST *list) {
    return This->lpVtbl->ParseRfc822(This,addrtype,encoding,rfcaddr,list);
}
static inline HRESULT IMimeAddressTable_Clone(IMimeAddressTable* This,IMimeAddressTable **table) {
    return This->lpVtbl->Clone(This,table);
}
static inline HRESULT IMimeAddressTable_BindToObject(IMimeAddressTable* This,REFIID riid,void **obj) {
    return This->lpVtbl->BindToObject(This,riid,obj);
}
#endif
#endif

#endif


#endif  /* __IMimeAddressTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeWebDocument interface
 */
#ifndef __IMimeWebDocument_INTERFACE_DEFINED__
#define __IMimeWebDocument_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeWebDocument, 0xee519f11, 0x851a, 0x11d0, 0x82,0x5c, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ee519f11-851a-11d0-825c-00c04fd85ab4")
IMimeWebDocument : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeWebDocument, 0xee519f11, 0x851a, 0x11d0, 0x82,0x5c, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeWebDocumentVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeWebDocument *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeWebDocument *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeWebDocument *This);

    END_INTERFACE
} IMimeWebDocumentVtbl;

interface IMimeWebDocument {
    CONST_VTBL IMimeWebDocumentVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeWebDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeWebDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeWebDocument_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeWebDocument_QueryInterface(IMimeWebDocument* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeWebDocument_AddRef(IMimeWebDocument* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeWebDocument_Release(IMimeWebDocument* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeWebDocument_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeBody interface
 */
#ifndef __IMimeBody_INTERFACE_DEFINED__
#define __IMimeBody_INTERFACE_DEFINED__

typedef IMimeBody *LPMIMEBODY;
typedef enum tagIMSGBODYTYPE {
    IBT_SECURE = 0,
    IBT_ATTACHMENT = 1,
    IBT_EMPTY = 2,
    IBT_CSETTAGGED = 3,
    IBT_AUTOATTACH = 4
} IMSGBODYTYPE;
typedef struct tagBODYOFFSETS {
    DWORD cbBoundaryStart;
    DWORD cbHeaderStart;
    DWORD cbBodyStart;
    DWORD cbBodyEnd;
} BODYOFFSETS;
typedef struct tagBODYOFFSETS *LPBODYOFFSETS;
typedef struct tagTRANSMITINFO {
    ENCODINGTYPE ietCurrent;
    ENCODINGTYPE ietXmitMime;
    ENCODINGTYPE ietXmit822;
    ULONG cbLongestLine;
    ULONG cExtended;
    ULONG ulPercentExt;
    ULONG cbSize;
    ULONG cLines;
} TRANSMITINFO;
typedef struct tagTRANSMITINFO *LPTRANSMITINFO;
DEFINE_GUID(IID_IMimeBody, 0xc558834c, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c558834c-7f86-11d0-8252-00c04fd85ab4")
IMimeBody : public IMimePropertySet
{
    virtual HRESULT STDMETHODCALLTYPE IsType(
        IMSGBODYTYPE bodytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDisplayName(
        LPCSTR pszDisplay) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
        LPSTR *ppszDisplay) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOffsets(
        LPBODYOFFSETS pOffsets) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentEncoding(
        ENCODINGTYPE *pietEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentEncoding(
        ENCODINGTYPE ietEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEstimatedSize(
        ENCODINGTYPE ietEncoding,
        ULONG *pcbSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDataHere(
        ENCODINGTYPE ietEncoding,
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetData(
        ENCODINGTYPE ietEncoding,
        IStream **ppStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetData(
        ENCODINGTYPE ietEncoding,
        LPCSTR pszPriType,
        LPCSTR pszSubType,
        REFIID riid,
        LPVOID pvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE EmptyData(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyTo(
        IMimeBody *pBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTransmitInfo(
        LPTRANSMITINFO pTransmitInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToFile(
        ENCODINGTYPE ietEncoding,
        LPCSTR pszFilePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHandle(
        LPHBODY phBody) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeBody, 0xc558834c, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeBodyVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeBody *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeBody *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeBody *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeBody *This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeBody *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeBody *This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeBody *This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeBody *This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeBody *This);

    /*** IMimePropertySet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropInfo)(
        IMimeBody *This,
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *SetPropInfo)(
        IMimeBody *This,
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimeBody *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimeBody *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *AppendProp)(
        IMimeBody *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimeBody *This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *CopyProps)(
        IMimeBody *This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *MoveProps)(
        IMimeBody *This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *DeleteExcept)(
        IMimeBody *This,
        ULONG cNames,
        LPCSTR *prgszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimeBody *This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeBody *This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeBody *This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *GetParameters)(
        IMimeBody *This,
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeBody *This,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeBody *This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeBody *This,
        IMimePropertySet **ppPropertySet);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeBody *This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeBody *This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *EnumProps)(
        IMimeBody *This,
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum);

    /*** IMimeBody methods ***/
    HRESULT (STDMETHODCALLTYPE *IsType)(
        IMimeBody *This,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *SetDisplayName)(
        IMimeBody *This,
        LPCSTR pszDisplay);

    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
        IMimeBody *This,
        LPSTR *ppszDisplay);

    HRESULT (STDMETHODCALLTYPE *GetOffsets)(
        IMimeBody *This,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCurrentEncoding)(
        IMimeBody *This,
        ENCODINGTYPE *pietEncoding);

    HRESULT (STDMETHODCALLTYPE *SetCurrentEncoding)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding);

    HRESULT (STDMETHODCALLTYPE *GetEstimatedSize)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding,
        ULONG *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetDataHere)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding,
        IStream **ppStream);

    HRESULT (STDMETHODCALLTYPE *SetData)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding,
        LPCSTR pszPriType,
        LPCSTR pszSubType,
        REFIID riid,
        LPVOID pvObject);

    HRESULT (STDMETHODCALLTYPE *EmptyData)(
        IMimeBody *This);

    HRESULT (STDMETHODCALLTYPE *CopyTo)(
        IMimeBody *This,
        IMimeBody *pBody);

    HRESULT (STDMETHODCALLTYPE *GetTransmitInfo)(
        IMimeBody *This,
        LPTRANSMITINFO pTransmitInfo);

    HRESULT (STDMETHODCALLTYPE *SaveToFile)(
        IMimeBody *This,
        ENCODINGTYPE ietEncoding,
        LPCSTR pszFilePath);

    HRESULT (STDMETHODCALLTYPE *GetHandle)(
        IMimeBody *This,
        LPHBODY phBody);

    END_INTERFACE
} IMimeBodyVtbl;

interface IMimeBody {
    CONST_VTBL IMimeBodyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeBody_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeBody_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeBody_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeBody_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeBody_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeBody_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeBody_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeBody_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeBody_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimePropertySet methods ***/
#define IMimeBody_GetPropInfo(This,pszName,pInfo) (This)->lpVtbl->GetPropInfo(This,pszName,pInfo)
#define IMimeBody_SetPropInfo(This,pszName,pInfo) (This)->lpVtbl->SetPropInfo(This,pszName,pInfo)
#define IMimeBody_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimeBody_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimeBody_AppendProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->AppendProp(This,pszName,dwFlags,pValue)
#define IMimeBody_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimeBody_CopyProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet)
#define IMimeBody_MoveProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet)
#define IMimeBody_DeleteExcept(This,cNames,prgszName) (This)->lpVtbl->DeleteExcept(This,cNames,prgszName)
#define IMimeBody_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeBody_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeBody_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeBody_GetParameters(This,pszName,pcParams,pprgParam) (This)->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam)
#define IMimeBody_IsContentType(This,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,pszPriType,pszSubType)
#define IMimeBody_BindToObject(This,riid,ppvObject) (This)->lpVtbl->BindToObject(This,riid,ppvObject)
#define IMimeBody_Clone(This,ppPropertySet) (This)->lpVtbl->Clone(This,ppPropertySet)
#define IMimeBody_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeBody_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#define IMimeBody_EnumProps(This,dwFlags,ppEnum) (This)->lpVtbl->EnumProps(This,dwFlags,ppEnum)
/*** IMimeBody methods ***/
#define IMimeBody_IsType(This,bodytype) (This)->lpVtbl->IsType(This,bodytype)
#define IMimeBody_SetDisplayName(This,pszDisplay) (This)->lpVtbl->SetDisplayName(This,pszDisplay)
#define IMimeBody_GetDisplayName(This,ppszDisplay) (This)->lpVtbl->GetDisplayName(This,ppszDisplay)
#define IMimeBody_GetOffsets(This,pOffsets) (This)->lpVtbl->GetOffsets(This,pOffsets)
#define IMimeBody_GetCurrentEncoding(This,pietEncoding) (This)->lpVtbl->GetCurrentEncoding(This,pietEncoding)
#define IMimeBody_SetCurrentEncoding(This,ietEncoding) (This)->lpVtbl->SetCurrentEncoding(This,ietEncoding)
#define IMimeBody_GetEstimatedSize(This,ietEncoding,pcbSize) (This)->lpVtbl->GetEstimatedSize(This,ietEncoding,pcbSize)
#define IMimeBody_GetDataHere(This,ietEncoding,pStream) (This)->lpVtbl->GetDataHere(This,ietEncoding,pStream)
#define IMimeBody_GetData(This,ietEncoding,ppStream) (This)->lpVtbl->GetData(This,ietEncoding,ppStream)
#define IMimeBody_SetData(This,ietEncoding,pszPriType,pszSubType,riid,pvObject) (This)->lpVtbl->SetData(This,ietEncoding,pszPriType,pszSubType,riid,pvObject)
#define IMimeBody_EmptyData(This) (This)->lpVtbl->EmptyData(This)
#define IMimeBody_CopyTo(This,pBody) (This)->lpVtbl->CopyTo(This,pBody)
#define IMimeBody_GetTransmitInfo(This,pTransmitInfo) (This)->lpVtbl->GetTransmitInfo(This,pTransmitInfo)
#define IMimeBody_SaveToFile(This,ietEncoding,pszFilePath) (This)->lpVtbl->SaveToFile(This,ietEncoding,pszFilePath)
#define IMimeBody_GetHandle(This,phBody) (This)->lpVtbl->GetHandle(This,phBody)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeBody_QueryInterface(IMimeBody* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeBody_AddRef(IMimeBody* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeBody_Release(IMimeBody* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IMimeBody_GetClassID(IMimeBody* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStreamInit methods ***/
static inline HRESULT IMimeBody_IsDirty(IMimeBody* This) {
    return This->lpVtbl->IsDirty(This);
}
static inline HRESULT IMimeBody_Load(IMimeBody* This,LPSTREAM pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static inline HRESULT IMimeBody_Save(IMimeBody* This,LPSTREAM pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static inline HRESULT IMimeBody_GetSizeMax(IMimeBody* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
static inline HRESULT IMimeBody_InitNew(IMimeBody* This) {
    return This->lpVtbl->InitNew(This);
}
/*** IMimePropertySet methods ***/
static inline HRESULT IMimeBody_GetPropInfo(IMimeBody* This,LPCSTR pszName,LPMIMEPROPINFO pInfo) {
    return This->lpVtbl->GetPropInfo(This,pszName,pInfo);
}
static inline HRESULT IMimeBody_SetPropInfo(IMimeBody* This,LPCSTR pszName,LPCMIMEPROPINFO pInfo) {
    return This->lpVtbl->SetPropInfo(This,pszName,pInfo);
}
static inline HRESULT IMimeBody_GetProp(IMimeBody* This,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeBody_SetProp(IMimeBody* This,LPCSTR pszName,DWORD dwFlags,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeBody_AppendProp(IMimeBody* This,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->AppendProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeBody_DeleteProp(IMimeBody* This,LPCSTR pszName) {
    return This->lpVtbl->DeleteProp(This,pszName);
}
static inline HRESULT IMimeBody_CopyProps(IMimeBody* This,ULONG cNames,LPCSTR *prgszName,IMimePropertySet *pPropertySet) {
    return This->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet);
}
static inline HRESULT IMimeBody_MoveProps(IMimeBody* This,ULONG cNames,LPCSTR *prgszName,IMimePropertySet *pPropertySet) {
    return This->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet);
}
static inline HRESULT IMimeBody_DeleteExcept(IMimeBody* This,ULONG cNames,LPCSTR *prgszName) {
    return This->lpVtbl->DeleteExcept(This,cNames,prgszName);
}
static inline HRESULT IMimeBody_QueryProp(IMimeBody* This,LPCSTR pszName,LPCSTR pszCriteria,boolean fSubString,boolean fCaseSensitive) {
    return This->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive);
}
static inline HRESULT IMimeBody_GetCharset(IMimeBody* This,LPHCHARSET phCharset) {
    return This->lpVtbl->GetCharset(This,phCharset);
}
static inline HRESULT IMimeBody_SetCharset(IMimeBody* This,HCHARSET hCharset,CSETAPPLYTYPE applytype) {
    return This->lpVtbl->SetCharset(This,hCharset,applytype);
}
static inline HRESULT IMimeBody_GetParameters(IMimeBody* This,LPCSTR pszName,ULONG *pcParams,LPMIMEPARAMINFO *pprgParam) {
    return This->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam);
}
static inline HRESULT IMimeBody_IsContentType(IMimeBody* This,LPCSTR pszPriType,LPCSTR pszSubType) {
    return This->lpVtbl->IsContentType(This,pszPriType,pszSubType);
}
static inline HRESULT IMimeBody_BindToObject(IMimeBody* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->BindToObject(This,riid,ppvObject);
}
static inline HRESULT IMimeBody_Clone(IMimeBody* This,IMimePropertySet **ppPropertySet) {
    return This->lpVtbl->Clone(This,ppPropertySet);
}
static inline HRESULT IMimeBody_SetOption(IMimeBody* This,const TYPEDID oid,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetOption(This,oid,pValue);
}
static inline HRESULT IMimeBody_GetOption(IMimeBody* This,const TYPEDID oid,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetOption(This,oid,pValue);
}
static inline HRESULT IMimeBody_EnumProps(IMimeBody* This,DWORD dwFlags,IMimeEnumProperties **ppEnum) {
    return This->lpVtbl->EnumProps(This,dwFlags,ppEnum);
}
/*** IMimeBody methods ***/
static inline HRESULT IMimeBody_IsType(IMimeBody* This,IMSGBODYTYPE bodytype) {
    return This->lpVtbl->IsType(This,bodytype);
}
static inline HRESULT IMimeBody_SetDisplayName(IMimeBody* This,LPCSTR pszDisplay) {
    return This->lpVtbl->SetDisplayName(This,pszDisplay);
}
static inline HRESULT IMimeBody_GetDisplayName(IMimeBody* This,LPSTR *ppszDisplay) {
    return This->lpVtbl->GetDisplayName(This,ppszDisplay);
}
static inline HRESULT IMimeBody_GetOffsets(IMimeBody* This,LPBODYOFFSETS pOffsets) {
    return This->lpVtbl->GetOffsets(This,pOffsets);
}
static inline HRESULT IMimeBody_GetCurrentEncoding(IMimeBody* This,ENCODINGTYPE *pietEncoding) {
    return This->lpVtbl->GetCurrentEncoding(This,pietEncoding);
}
static inline HRESULT IMimeBody_SetCurrentEncoding(IMimeBody* This,ENCODINGTYPE ietEncoding) {
    return This->lpVtbl->SetCurrentEncoding(This,ietEncoding);
}
static inline HRESULT IMimeBody_GetEstimatedSize(IMimeBody* This,ENCODINGTYPE ietEncoding,ULONG *pcbSize) {
    return This->lpVtbl->GetEstimatedSize(This,ietEncoding,pcbSize);
}
static inline HRESULT IMimeBody_GetDataHere(IMimeBody* This,ENCODINGTYPE ietEncoding,IStream *pStream) {
    return This->lpVtbl->GetDataHere(This,ietEncoding,pStream);
}
static inline HRESULT IMimeBody_GetData(IMimeBody* This,ENCODINGTYPE ietEncoding,IStream **ppStream) {
    return This->lpVtbl->GetData(This,ietEncoding,ppStream);
}
static inline HRESULT IMimeBody_SetData(IMimeBody* This,ENCODINGTYPE ietEncoding,LPCSTR pszPriType,LPCSTR pszSubType,REFIID riid,LPVOID pvObject) {
    return This->lpVtbl->SetData(This,ietEncoding,pszPriType,pszSubType,riid,pvObject);
}
static inline HRESULT IMimeBody_EmptyData(IMimeBody* This) {
    return This->lpVtbl->EmptyData(This);
}
static inline HRESULT IMimeBody_CopyTo(IMimeBody* This,IMimeBody *pBody) {
    return This->lpVtbl->CopyTo(This,pBody);
}
static inline HRESULT IMimeBody_GetTransmitInfo(IMimeBody* This,LPTRANSMITINFO pTransmitInfo) {
    return This->lpVtbl->GetTransmitInfo(This,pTransmitInfo);
}
static inline HRESULT IMimeBody_SaveToFile(IMimeBody* This,ENCODINGTYPE ietEncoding,LPCSTR pszFilePath) {
    return This->lpVtbl->SaveToFile(This,ietEncoding,pszFilePath);
}
static inline HRESULT IMimeBody_GetHandle(IMimeBody* This,LPHBODY phBody) {
    return This->lpVtbl->GetHandle(This,phBody);
}
#endif
#endif

#endif


#endif  /* __IMimeBody_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageTree interface
 */
#ifndef __IMimeMessageTree_INTERFACE_DEFINED__
#define __IMimeMessageTree_INTERFACE_DEFINED__

typedef IMimeMessageTree *LPMIMEMESSAGETREE;
#define HBODY_ROOT ((HBODY)-1)

typedef enum tagBODYLOCATION {
    IBL_ROOT = 0,
    IBL_PARENT = 1,
    IBL_FIRST = 2,
    IBL_LAST = 3,
    IBL_NEXT = 4,
    IBL_PREVIOUS = 5
} BODYLOCATION;
typedef struct tagFINDBODY {
    LPSTR pszPriType;
    LPSTR pszSubType;
    DWORD dwReserved;
} FINDBODY;
typedef struct tagFINDBODY *LPFINDBODY;
DEFINE_GUID(IID_IMimeMessageTree, 0xfd853cd4, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cd4-7f86-11d0-8252-00c04fd85ab4")
IMimeMessageTree : public IPersistStreamInit
{
    virtual HRESULT STDMETHODCALLTYPE GetMessageSource(
        IStream **ppStream,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMessageSize(
        ULONG *pcbSize,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadOffsetTable(
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveOffsetTable(
        IStream *pStream,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFlags(
        DWORD *pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE HandsOffStorage(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        const HBODY hBody,
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveBody(
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE InsertBody(
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBody(
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteBody(
        HBODY hBody,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveBody(
        HBODY hBody,
        BODYLOCATION location) = 0;

    virtual HRESULT STDMETHODCALLTYPE CountBodies(
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindFirst(
        LPFINDBODY pFindBody,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindNext(
        LPFINDBODY pFindBody,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResolveURL(
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE ToMultipart(
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBodyOffsets(
        HBODY hBody,
        LPBODYOFFSETS pOffsets) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCharset(
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsBodyType(
        HBODY hBody,
        IMSGBODYTYPE bodytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsContentType(
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteBodyProp(
        HBODY hBody,
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOption(
        const TYPEDID oid,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOption(
        const TYPEDID oid,
        LPPROPVARIANT pValue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeMessageTree, 0xfd853cd4, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeMessageTreeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageTree *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageTree *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageTree *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeMessageTree *This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeMessageTree *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeMessageTree *This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeMessageTree *This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeMessageTree *This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeMessageTree *This);

    /*** IMimeMessageTree methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMessageSource)(
        IMimeMessageTree *This,
        IStream **ppStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetMessageSize)(
        IMimeMessageTree *This,
        ULONG *pcbSize,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *LoadOffsetTable)(
        IMimeMessageTree *This,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *SaveOffsetTable)(
        IMimeMessageTree *This,
        IStream *pStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetFlags)(
        IMimeMessageTree *This,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMimeMessageTree *This,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
        IMimeMessageTree *This);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeMessageTree *This,
        const HBODY hBody,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *SaveBody)(
        IMimeMessageTree *This,
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *InsertBody)(
        IMimeMessageTree *This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetBody)(
        IMimeMessageTree *This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *DeleteBody)(
        IMimeMessageTree *This,
        HBODY hBody,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *MoveBody)(
        IMimeMessageTree *This,
        HBODY hBody,
        BODYLOCATION location);

    HRESULT (STDMETHODCALLTYPE *CountBodies)(
        IMimeMessageTree *This,
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies);

    HRESULT (STDMETHODCALLTYPE *FindFirst)(
        IMimeMessageTree *This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *FindNext)(
        IMimeMessageTree *This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ResolveURL)(
        IMimeMessageTree *This,
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ToMultipart)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart);

    HRESULT (STDMETHODCALLTYPE *GetBodyOffsets)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeMessageTree *This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeMessageTree *This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *IsBodyType)(
        IMimeMessageTree *This,
        HBODY hBody,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *QueryBodyProp)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetBodyProp)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetBodyProp)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteBodyProp)(
        IMimeMessageTree *This,
        HBODY hBody,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeMessageTree *This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeMessageTree *This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    END_INTERFACE
} IMimeMessageTreeVtbl;

interface IMimeMessageTree {
    CONST_VTBL IMimeMessageTreeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeMessageTree_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageTree_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageTree_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeMessageTree_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeMessageTree_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeMessageTree_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeMessageTree_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeMessageTree_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeMessageTree_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimeMessageTree methods ***/
#define IMimeMessageTree_GetMessageSource(This,ppStream,dwFlags) (This)->lpVtbl->GetMessageSource(This,ppStream,dwFlags)
#define IMimeMessageTree_GetMessageSize(This,pcbSize,dwFlags) (This)->lpVtbl->GetMessageSize(This,pcbSize,dwFlags)
#define IMimeMessageTree_LoadOffsetTable(This,pStream) (This)->lpVtbl->LoadOffsetTable(This,pStream)
#define IMimeMessageTree_SaveOffsetTable(This,pStream,dwFlags) (This)->lpVtbl->SaveOffsetTable(This,pStream,dwFlags)
#define IMimeMessageTree_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
#define IMimeMessageTree_Commit(This,dwFlags) (This)->lpVtbl->Commit(This,dwFlags)
#define IMimeMessageTree_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
#define IMimeMessageTree_BindToObject(This,hBody,riid,ppvObject) (This)->lpVtbl->BindToObject(This,hBody,riid,ppvObject)
#define IMimeMessageTree_SaveBody(This,hBody,dwFlags,pStream) (This)->lpVtbl->SaveBody(This,hBody,dwFlags,pStream)
#define IMimeMessageTree_InsertBody(This,location,hPivot,phBody) (This)->lpVtbl->InsertBody(This,location,hPivot,phBody)
#define IMimeMessageTree_GetBody(This,location,hPivot,phBody) (This)->lpVtbl->GetBody(This,location,hPivot,phBody)
#define IMimeMessageTree_DeleteBody(This,hBody,dwFlags) (This)->lpVtbl->DeleteBody(This,hBody,dwFlags)
#define IMimeMessageTree_MoveBody(This,hBody,location) (This)->lpVtbl->MoveBody(This,hBody,location)
#define IMimeMessageTree_CountBodies(This,hParent,fRecurse,pcBodies) (This)->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies)
#define IMimeMessageTree_FindFirst(This,pFindBody,phBody) (This)->lpVtbl->FindFirst(This,pFindBody,phBody)
#define IMimeMessageTree_FindNext(This,pFindBody,phBody) (This)->lpVtbl->FindNext(This,pFindBody,phBody)
#define IMimeMessageTree_ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody) (This)->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody)
#define IMimeMessageTree_ToMultipart(This,hBody,pszSubType,phMultipart) (This)->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart)
#define IMimeMessageTree_GetBodyOffsets(This,hBody,pOffsets) (This)->lpVtbl->GetBodyOffsets(This,hBody,pOffsets)
#define IMimeMessageTree_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeMessageTree_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeMessageTree_IsBodyType(This,hBody,bodytype) (This)->lpVtbl->IsBodyType(This,hBody,bodytype)
#define IMimeMessageTree_IsContentType(This,hBody,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType)
#define IMimeMessageTree_QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessageTree_GetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessageTree_SetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessageTree_DeleteBodyProp(This,hBody,pszName) (This)->lpVtbl->DeleteBodyProp(This,hBody,pszName)
#define IMimeMessageTree_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeMessageTree_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeMessageTree_QueryInterface(IMimeMessageTree* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeMessageTree_AddRef(IMimeMessageTree* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeMessageTree_Release(IMimeMessageTree* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IMimeMessageTree_GetClassID(IMimeMessageTree* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStreamInit methods ***/
static inline HRESULT IMimeMessageTree_IsDirty(IMimeMessageTree* This) {
    return This->lpVtbl->IsDirty(This);
}
static inline HRESULT IMimeMessageTree_Load(IMimeMessageTree* This,LPSTREAM pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static inline HRESULT IMimeMessageTree_Save(IMimeMessageTree* This,LPSTREAM pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static inline HRESULT IMimeMessageTree_GetSizeMax(IMimeMessageTree* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
static inline HRESULT IMimeMessageTree_InitNew(IMimeMessageTree* This) {
    return This->lpVtbl->InitNew(This);
}
/*** IMimeMessageTree methods ***/
static inline HRESULT IMimeMessageTree_GetMessageSource(IMimeMessageTree* This,IStream **ppStream,DWORD dwFlags) {
    return This->lpVtbl->GetMessageSource(This,ppStream,dwFlags);
}
static inline HRESULT IMimeMessageTree_GetMessageSize(IMimeMessageTree* This,ULONG *pcbSize,DWORD dwFlags) {
    return This->lpVtbl->GetMessageSize(This,pcbSize,dwFlags);
}
static inline HRESULT IMimeMessageTree_LoadOffsetTable(IMimeMessageTree* This,IStream *pStream) {
    return This->lpVtbl->LoadOffsetTable(This,pStream);
}
static inline HRESULT IMimeMessageTree_SaveOffsetTable(IMimeMessageTree* This,IStream *pStream,DWORD dwFlags) {
    return This->lpVtbl->SaveOffsetTable(This,pStream,dwFlags);
}
static inline HRESULT IMimeMessageTree_GetFlags(IMimeMessageTree* This,DWORD *pdwFlags) {
    return This->lpVtbl->GetFlags(This,pdwFlags);
}
static inline HRESULT IMimeMessageTree_Commit(IMimeMessageTree* This,DWORD dwFlags) {
    return This->lpVtbl->Commit(This,dwFlags);
}
static inline HRESULT IMimeMessageTree_HandsOffStorage(IMimeMessageTree* This) {
    return This->lpVtbl->HandsOffStorage(This);
}
static inline HRESULT IMimeMessageTree_BindToObject(IMimeMessageTree* This,const HBODY hBody,REFIID riid,void **ppvObject) {
    return This->lpVtbl->BindToObject(This,hBody,riid,ppvObject);
}
static inline HRESULT IMimeMessageTree_SaveBody(IMimeMessageTree* This,HBODY hBody,DWORD dwFlags,IStream *pStream) {
    return This->lpVtbl->SaveBody(This,hBody,dwFlags,pStream);
}
static inline HRESULT IMimeMessageTree_InsertBody(IMimeMessageTree* This,BODYLOCATION location,HBODY hPivot,LPHBODY phBody) {
    return This->lpVtbl->InsertBody(This,location,hPivot,phBody);
}
static inline HRESULT IMimeMessageTree_GetBody(IMimeMessageTree* This,BODYLOCATION location,HBODY hPivot,LPHBODY phBody) {
    return This->lpVtbl->GetBody(This,location,hPivot,phBody);
}
static inline HRESULT IMimeMessageTree_DeleteBody(IMimeMessageTree* This,HBODY hBody,DWORD dwFlags) {
    return This->lpVtbl->DeleteBody(This,hBody,dwFlags);
}
static inline HRESULT IMimeMessageTree_MoveBody(IMimeMessageTree* This,HBODY hBody,BODYLOCATION location) {
    return This->lpVtbl->MoveBody(This,hBody,location);
}
static inline HRESULT IMimeMessageTree_CountBodies(IMimeMessageTree* This,HBODY hParent,boolean fRecurse,ULONG *pcBodies) {
    return This->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies);
}
static inline HRESULT IMimeMessageTree_FindFirst(IMimeMessageTree* This,LPFINDBODY pFindBody,LPHBODY phBody) {
    return This->lpVtbl->FindFirst(This,pFindBody,phBody);
}
static inline HRESULT IMimeMessageTree_FindNext(IMimeMessageTree* This,LPFINDBODY pFindBody,LPHBODY phBody) {
    return This->lpVtbl->FindNext(This,pFindBody,phBody);
}
static inline HRESULT IMimeMessageTree_ResolveURL(IMimeMessageTree* This,HBODY hRelated,LPCSTR pszBase,LPCSTR pszURL,DWORD dwFlags,LPHBODY phBody) {
    return This->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody);
}
static inline HRESULT IMimeMessageTree_ToMultipart(IMimeMessageTree* This,HBODY hBody,LPCSTR pszSubType,LPHBODY phMultipart) {
    return This->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart);
}
static inline HRESULT IMimeMessageTree_GetBodyOffsets(IMimeMessageTree* This,HBODY hBody,LPBODYOFFSETS pOffsets) {
    return This->lpVtbl->GetBodyOffsets(This,hBody,pOffsets);
}
static inline HRESULT IMimeMessageTree_GetCharset(IMimeMessageTree* This,LPHCHARSET phCharset) {
    return This->lpVtbl->GetCharset(This,phCharset);
}
static inline HRESULT IMimeMessageTree_SetCharset(IMimeMessageTree* This,HCHARSET hCharset,CSETAPPLYTYPE applytype) {
    return This->lpVtbl->SetCharset(This,hCharset,applytype);
}
static inline HRESULT IMimeMessageTree_IsBodyType(IMimeMessageTree* This,HBODY hBody,IMSGBODYTYPE bodytype) {
    return This->lpVtbl->IsBodyType(This,hBody,bodytype);
}
static inline HRESULT IMimeMessageTree_IsContentType(IMimeMessageTree* This,HBODY hBody,LPCSTR pszPriType,LPCSTR pszSubType) {
    return This->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType);
}
static inline HRESULT IMimeMessageTree_QueryBodyProp(IMimeMessageTree* This,HBODY hBody,LPCSTR pszName,LPCSTR pszCriteria,boolean fSubString,boolean fCaseSensitive) {
    return This->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive);
}
static inline HRESULT IMimeMessageTree_GetBodyProp(IMimeMessageTree* This,HBODY hBody,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessageTree_SetBodyProp(IMimeMessageTree* This,HBODY hBody,LPCSTR pszName,DWORD dwFlags,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessageTree_DeleteBodyProp(IMimeMessageTree* This,HBODY hBody,LPCSTR pszName) {
    return This->lpVtbl->DeleteBodyProp(This,hBody,pszName);
}
static inline HRESULT IMimeMessageTree_SetOption(IMimeMessageTree* This,const TYPEDID oid,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetOption(This,oid,pValue);
}
static inline HRESULT IMimeMessageTree_GetOption(IMimeMessageTree* This,const TYPEDID oid,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetOption(This,oid,pValue);
}
#endif
#endif

#endif


#endif  /* __IMimeMessageTree_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessage interface
 */
#ifndef __IMimeMessage_INTERFACE_DEFINED__
#define __IMimeMessage_INTERFACE_DEFINED__

typedef IMimeMessage *LPMIMEMESSAGE;
typedef DWORD TEXTTYPE;
typedef enum tagIMSGFLAGS {
    IMF_ATTACHMENTS = 0x1,
    IMF_MULTIPART = 0x2,
    IMF_SUBMULTIPART = 0x4,
    IMF_MIME = 0x8,
    IMF_HTML = 0x10,
    IMF_PLAIN = 0x20,
    IMF_PARTIAL = 0x40,
    IMF_SIGNED = 0x80,
    IMF_ENCRYPTED = 0x100,
    IMF_TNEF = 0x200,
    IMF_MHTML = 0x400,
    IMF_SECURE = 0x800,
    IMF_TEXT = 0x1000,
    IMF_CSETTAGGED = 0x2000,
    IMF_NEWS = 0x4000,
    IMF_VOICEMAIL = 0x8000,
    IMF_HASVCARD = 0x10000,
    IMF_RFC1154 = 0x20000
} IMSGFLAGS;
typedef enum tagIMSGPRIORITY {
    IMSG_PRI_LOW = 5,
    IMSG_PRI_NORMAL = 3,
    IMSG_PRI_HIGH = 1
} IMSGPRIORITY;
#define WPF_HTML             0x00000001
#define WPF_AUTOINLINE       0x00000002
#define WPF_SLIDESHOW        0x00000004
#define WPF_ATTACHLINKS      0x00000008
#define WPF_IMAGESONLY       0x00000010
#define WPF_NOMETACHARSET    0x00000020
typedef struct tagWEPAGEOPTIONS {
    DWORD cbSize;
    DWORD dwFlags;
    DWORD dwDelay;
    WCHAR wchQuote;
} WEBPAGEOPTIONS;
typedef struct tagWEPAGEOPTIONS *LPWEBPAGEOPTIONS;
#define TXT_PLAIN       1
#define TXT_HTML        2
DEFINE_GUID(IID_IMimeMessage, 0xfd853cd5, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cd5-7f86-11d0-8252-00c04fd85ab4")
IMimeMessage : public IMimeMessageTree
{
    virtual HRESULT STDMETHODCALLTYPE CreateWebPage(
        IStream *pRootStm,
        LPWEBPAGEOPTIONS pOptions,
        IMimeMessageCallback *pCallback,
        IMoniker **ppMoniker) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteProp(
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryProp(
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTextBody(
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        IStream **pStream,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextBody(
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        HBODY hAlternative,
        IStream *pStream,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachObject(
        REFIID riid,
        void *pvObject,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachFile(
        LPCSTR pszFilePath,
        IStream *pstmFile,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachURL(
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        IStream *pstmURL,
        LPSTR *ppszCIDURL,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttachments(
        ULONG *pcAttach,
        LPHBODY *pprghAttach) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressTable(
        IMimeAddressTable **ppTable) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSender(
        LPADDRESSPROPS pAddress) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressTypes(
        DWORD dwAdrTypes,
        DWORD dwProps,
        LPADDRESSLIST pList) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressFormat(
        DWORD dwAdrTypes,
        ADDRESSFORMAT format,
        LPSTR *ppszFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumAddressTypes(
        DWORD dwAdrTypes,
        DWORD dwProps,
        IMimeEnumAddressTypes **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SplitMessage(
        ULONG cbMaxPart,
        IMimeMessageParts **ppParts) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRootMoniker(
        IMoniker **ppMoniker) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeMessage, 0xfd853cd5, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeMessageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessage *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessage *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessage *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeMessage *This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeMessage *This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeMessage *This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeMessage *This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeMessage *This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeMessage *This);

    /*** IMimeMessageTree methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMessageSource)(
        IMimeMessage *This,
        IStream **ppStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetMessageSize)(
        IMimeMessage *This,
        ULONG *pcbSize,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *LoadOffsetTable)(
        IMimeMessage *This,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *SaveOffsetTable)(
        IMimeMessage *This,
        IStream *pStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetFlags)(
        IMimeMessage *This,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMimeMessage *This,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
        IMimeMessage *This);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeMessage *This,
        const HBODY hBody,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *SaveBody)(
        IMimeMessage *This,
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *InsertBody)(
        IMimeMessage *This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetBody)(
        IMimeMessage *This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *DeleteBody)(
        IMimeMessage *This,
        HBODY hBody,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *MoveBody)(
        IMimeMessage *This,
        HBODY hBody,
        BODYLOCATION location);

    HRESULT (STDMETHODCALLTYPE *CountBodies)(
        IMimeMessage *This,
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies);

    HRESULT (STDMETHODCALLTYPE *FindFirst)(
        IMimeMessage *This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *FindNext)(
        IMimeMessage *This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ResolveURL)(
        IMimeMessage *This,
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ToMultipart)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart);

    HRESULT (STDMETHODCALLTYPE *GetBodyOffsets)(
        IMimeMessage *This,
        HBODY hBody,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeMessage *This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeMessage *This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *IsBodyType)(
        IMimeMessage *This,
        HBODY hBody,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *QueryBodyProp)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetBodyProp)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetBodyProp)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteBodyProp)(
        IMimeMessage *This,
        HBODY hBody,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeMessage *This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeMessage *This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    /*** IMimeMessage methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateWebPage)(
        IMimeMessage *This,
        IStream *pRootStm,
        LPWEBPAGEOPTIONS pOptions,
        IMimeMessageCallback *pCallback,
        IMoniker **ppMoniker);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimeMessage *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimeMessage *This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimeMessage *This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimeMessage *This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetTextBody)(
        IMimeMessage *This,
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        IStream **pStream,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *SetTextBody)(
        IMimeMessage *This,
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        HBODY hAlternative,
        IStream *pStream,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachObject)(
        IMimeMessage *This,
        REFIID riid,
        void *pvObject,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachFile)(
        IMimeMessage *This,
        LPCSTR pszFilePath,
        IStream *pstmFile,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachURL)(
        IMimeMessage *This,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        IStream *pstmURL,
        LPSTR *ppszCIDURL,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetAttachments)(
        IMimeMessage *This,
        ULONG *pcAttach,
        LPHBODY *pprghAttach);

    HRESULT (STDMETHODCALLTYPE *GetAddressTable)(
        IMimeMessage *This,
        IMimeAddressTable **ppTable);

    HRESULT (STDMETHODCALLTYPE *GetSender)(
        IMimeMessage *This,
        LPADDRESSPROPS pAddress);

    HRESULT (STDMETHODCALLTYPE *GetAddressTypes)(
        IMimeMessage *This,
        DWORD dwAdrTypes,
        DWORD dwProps,
        LPADDRESSLIST pList);

    HRESULT (STDMETHODCALLTYPE *GetAddressFormat)(
        IMimeMessage *This,
        DWORD dwAdrTypes,
        ADDRESSFORMAT format,
        LPSTR *ppszFormat);

    HRESULT (STDMETHODCALLTYPE *EnumAddressTypes)(
        IMimeMessage *This,
        DWORD dwAdrTypes,
        DWORD dwProps,
        IMimeEnumAddressTypes **ppEnum);

    HRESULT (STDMETHODCALLTYPE *SplitMessage)(
        IMimeMessage *This,
        ULONG cbMaxPart,
        IMimeMessageParts **ppParts);

    HRESULT (STDMETHODCALLTYPE *GetRootMoniker)(
        IMimeMessage *This,
        IMoniker **ppMoniker);

    END_INTERFACE
} IMimeMessageVtbl;

interface IMimeMessage {
    CONST_VTBL IMimeMessageVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeMessage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessage_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeMessage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeMessage_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeMessage_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeMessage_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeMessage_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeMessage_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimeMessageTree methods ***/
#define IMimeMessage_GetMessageSource(This,ppStream,dwFlags) (This)->lpVtbl->GetMessageSource(This,ppStream,dwFlags)
#define IMimeMessage_GetMessageSize(This,pcbSize,dwFlags) (This)->lpVtbl->GetMessageSize(This,pcbSize,dwFlags)
#define IMimeMessage_LoadOffsetTable(This,pStream) (This)->lpVtbl->LoadOffsetTable(This,pStream)
#define IMimeMessage_SaveOffsetTable(This,pStream,dwFlags) (This)->lpVtbl->SaveOffsetTable(This,pStream,dwFlags)
#define IMimeMessage_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
#define IMimeMessage_Commit(This,dwFlags) (This)->lpVtbl->Commit(This,dwFlags)
#define IMimeMessage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
#define IMimeMessage_BindToObject(This,hBody,riid,ppvObject) (This)->lpVtbl->BindToObject(This,hBody,riid,ppvObject)
#define IMimeMessage_SaveBody(This,hBody,dwFlags,pStream) (This)->lpVtbl->SaveBody(This,hBody,dwFlags,pStream)
#define IMimeMessage_InsertBody(This,location,hPivot,phBody) (This)->lpVtbl->InsertBody(This,location,hPivot,phBody)
#define IMimeMessage_GetBody(This,location,hPivot,phBody) (This)->lpVtbl->GetBody(This,location,hPivot,phBody)
#define IMimeMessage_DeleteBody(This,hBody,dwFlags) (This)->lpVtbl->DeleteBody(This,hBody,dwFlags)
#define IMimeMessage_MoveBody(This,hBody,location) (This)->lpVtbl->MoveBody(This,hBody,location)
#define IMimeMessage_CountBodies(This,hParent,fRecurse,pcBodies) (This)->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies)
#define IMimeMessage_FindFirst(This,pFindBody,phBody) (This)->lpVtbl->FindFirst(This,pFindBody,phBody)
#define IMimeMessage_FindNext(This,pFindBody,phBody) (This)->lpVtbl->FindNext(This,pFindBody,phBody)
#define IMimeMessage_ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody) (This)->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody)
#define IMimeMessage_ToMultipart(This,hBody,pszSubType,phMultipart) (This)->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart)
#define IMimeMessage_GetBodyOffsets(This,hBody,pOffsets) (This)->lpVtbl->GetBodyOffsets(This,hBody,pOffsets)
#define IMimeMessage_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeMessage_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeMessage_IsBodyType(This,hBody,bodytype) (This)->lpVtbl->IsBodyType(This,hBody,bodytype)
#define IMimeMessage_IsContentType(This,hBody,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType)
#define IMimeMessage_QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessage_GetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessage_SetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessage_DeleteBodyProp(This,hBody,pszName) (This)->lpVtbl->DeleteBodyProp(This,hBody,pszName)
#define IMimeMessage_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeMessage_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
/*** IMimeMessage methods ***/
#define IMimeMessage_CreateWebPage(This,pRootStm,pOptions,pCallback,ppMoniker) (This)->lpVtbl->CreateWebPage(This,pRootStm,pOptions,pCallback,ppMoniker)
#define IMimeMessage_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimeMessage_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimeMessage_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimeMessage_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessage_GetTextBody(This,dwTxtType,ietEncoding,pStream,phBody) (This)->lpVtbl->GetTextBody(This,dwTxtType,ietEncoding,pStream,phBody)
#define IMimeMessage_SetTextBody(This,dwTxtType,ietEncoding,hAlternative,pStream,phBody) (This)->lpVtbl->SetTextBody(This,dwTxtType,ietEncoding,hAlternative,pStream,phBody)
#define IMimeMessage_AttachObject(This,riid,pvObject,phBody) (This)->lpVtbl->AttachObject(This,riid,pvObject,phBody)
#define IMimeMessage_AttachFile(This,pszFilePath,pstmFile,phBody) (This)->lpVtbl->AttachFile(This,pszFilePath,pstmFile,phBody)
#define IMimeMessage_AttachURL(This,pszBase,pszURL,dwFlags,pstmURL,ppszCIDURL,phBody) (This)->lpVtbl->AttachURL(This,pszBase,pszURL,dwFlags,pstmURL,ppszCIDURL,phBody)
#define IMimeMessage_GetAttachments(This,pcAttach,pprghAttach) (This)->lpVtbl->GetAttachments(This,pcAttach,pprghAttach)
#define IMimeMessage_GetAddressTable(This,ppTable) (This)->lpVtbl->GetAddressTable(This,ppTable)
#define IMimeMessage_GetSender(This,pAddress) (This)->lpVtbl->GetSender(This,pAddress)
#define IMimeMessage_GetAddressTypes(This,dwAdrTypes,dwProps,pList) (This)->lpVtbl->GetAddressTypes(This,dwAdrTypes,dwProps,pList)
#define IMimeMessage_GetAddressFormat(This,dwAdrTypes,format,ppszFormat) (This)->lpVtbl->GetAddressFormat(This,dwAdrTypes,format,ppszFormat)
#define IMimeMessage_EnumAddressTypes(This,dwAdrTypes,dwProps,ppEnum) (This)->lpVtbl->EnumAddressTypes(This,dwAdrTypes,dwProps,ppEnum)
#define IMimeMessage_SplitMessage(This,cbMaxPart,ppParts) (This)->lpVtbl->SplitMessage(This,cbMaxPart,ppParts)
#define IMimeMessage_GetRootMoniker(This,ppMoniker) (This)->lpVtbl->GetRootMoniker(This,ppMoniker)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeMessage_QueryInterface(IMimeMessage* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeMessage_AddRef(IMimeMessage* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeMessage_Release(IMimeMessage* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IMimeMessage_GetClassID(IMimeMessage* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStreamInit methods ***/
static inline HRESULT IMimeMessage_IsDirty(IMimeMessage* This) {
    return This->lpVtbl->IsDirty(This);
}
static inline HRESULT IMimeMessage_Load(IMimeMessage* This,LPSTREAM pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static inline HRESULT IMimeMessage_Save(IMimeMessage* This,LPSTREAM pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static inline HRESULT IMimeMessage_GetSizeMax(IMimeMessage* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
static inline HRESULT IMimeMessage_InitNew(IMimeMessage* This) {
    return This->lpVtbl->InitNew(This);
}
/*** IMimeMessageTree methods ***/
static inline HRESULT IMimeMessage_GetMessageSource(IMimeMessage* This,IStream **ppStream,DWORD dwFlags) {
    return This->lpVtbl->GetMessageSource(This,ppStream,dwFlags);
}
static inline HRESULT IMimeMessage_GetMessageSize(IMimeMessage* This,ULONG *pcbSize,DWORD dwFlags) {
    return This->lpVtbl->GetMessageSize(This,pcbSize,dwFlags);
}
static inline HRESULT IMimeMessage_LoadOffsetTable(IMimeMessage* This,IStream *pStream) {
    return This->lpVtbl->LoadOffsetTable(This,pStream);
}
static inline HRESULT IMimeMessage_SaveOffsetTable(IMimeMessage* This,IStream *pStream,DWORD dwFlags) {
    return This->lpVtbl->SaveOffsetTable(This,pStream,dwFlags);
}
static inline HRESULT IMimeMessage_GetFlags(IMimeMessage* This,DWORD *pdwFlags) {
    return This->lpVtbl->GetFlags(This,pdwFlags);
}
static inline HRESULT IMimeMessage_Commit(IMimeMessage* This,DWORD dwFlags) {
    return This->lpVtbl->Commit(This,dwFlags);
}
static inline HRESULT IMimeMessage_HandsOffStorage(IMimeMessage* This) {
    return This->lpVtbl->HandsOffStorage(This);
}
static inline HRESULT IMimeMessage_BindToObject(IMimeMessage* This,const HBODY hBody,REFIID riid,void **ppvObject) {
    return This->lpVtbl->BindToObject(This,hBody,riid,ppvObject);
}
static inline HRESULT IMimeMessage_SaveBody(IMimeMessage* This,HBODY hBody,DWORD dwFlags,IStream *pStream) {
    return This->lpVtbl->SaveBody(This,hBody,dwFlags,pStream);
}
static inline HRESULT IMimeMessage_InsertBody(IMimeMessage* This,BODYLOCATION location,HBODY hPivot,LPHBODY phBody) {
    return This->lpVtbl->InsertBody(This,location,hPivot,phBody);
}
static inline HRESULT IMimeMessage_GetBody(IMimeMessage* This,BODYLOCATION location,HBODY hPivot,LPHBODY phBody) {
    return This->lpVtbl->GetBody(This,location,hPivot,phBody);
}
static inline HRESULT IMimeMessage_DeleteBody(IMimeMessage* This,HBODY hBody,DWORD dwFlags) {
    return This->lpVtbl->DeleteBody(This,hBody,dwFlags);
}
static inline HRESULT IMimeMessage_MoveBody(IMimeMessage* This,HBODY hBody,BODYLOCATION location) {
    return This->lpVtbl->MoveBody(This,hBody,location);
}
static inline HRESULT IMimeMessage_CountBodies(IMimeMessage* This,HBODY hParent,boolean fRecurse,ULONG *pcBodies) {
    return This->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies);
}
static inline HRESULT IMimeMessage_FindFirst(IMimeMessage* This,LPFINDBODY pFindBody,LPHBODY phBody) {
    return This->lpVtbl->FindFirst(This,pFindBody,phBody);
}
static inline HRESULT IMimeMessage_FindNext(IMimeMessage* This,LPFINDBODY pFindBody,LPHBODY phBody) {
    return This->lpVtbl->FindNext(This,pFindBody,phBody);
}
static inline HRESULT IMimeMessage_ResolveURL(IMimeMessage* This,HBODY hRelated,LPCSTR pszBase,LPCSTR pszURL,DWORD dwFlags,LPHBODY phBody) {
    return This->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody);
}
static inline HRESULT IMimeMessage_ToMultipart(IMimeMessage* This,HBODY hBody,LPCSTR pszSubType,LPHBODY phMultipart) {
    return This->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart);
}
static inline HRESULT IMimeMessage_GetBodyOffsets(IMimeMessage* This,HBODY hBody,LPBODYOFFSETS pOffsets) {
    return This->lpVtbl->GetBodyOffsets(This,hBody,pOffsets);
}
static inline HRESULT IMimeMessage_GetCharset(IMimeMessage* This,LPHCHARSET phCharset) {
    return This->lpVtbl->GetCharset(This,phCharset);
}
static inline HRESULT IMimeMessage_SetCharset(IMimeMessage* This,HCHARSET hCharset,CSETAPPLYTYPE applytype) {
    return This->lpVtbl->SetCharset(This,hCharset,applytype);
}
static inline HRESULT IMimeMessage_IsBodyType(IMimeMessage* This,HBODY hBody,IMSGBODYTYPE bodytype) {
    return This->lpVtbl->IsBodyType(This,hBody,bodytype);
}
static inline HRESULT IMimeMessage_IsContentType(IMimeMessage* This,HBODY hBody,LPCSTR pszPriType,LPCSTR pszSubType) {
    return This->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType);
}
static inline HRESULT IMimeMessage_QueryBodyProp(IMimeMessage* This,HBODY hBody,LPCSTR pszName,LPCSTR pszCriteria,boolean fSubString,boolean fCaseSensitive) {
    return This->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive);
}
static inline HRESULT IMimeMessage_GetBodyProp(IMimeMessage* This,HBODY hBody,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessage_SetBodyProp(IMimeMessage* This,HBODY hBody,LPCSTR pszName,DWORD dwFlags,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessage_DeleteBodyProp(IMimeMessage* This,HBODY hBody,LPCSTR pszName) {
    return This->lpVtbl->DeleteBodyProp(This,hBody,pszName);
}
static inline HRESULT IMimeMessage_SetOption(IMimeMessage* This,const TYPEDID oid,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetOption(This,oid,pValue);
}
static inline HRESULT IMimeMessage_GetOption(IMimeMessage* This,const TYPEDID oid,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetOption(This,oid,pValue);
}
/*** IMimeMessage methods ***/
static inline HRESULT IMimeMessage_CreateWebPage(IMimeMessage* This,IStream *pRootStm,LPWEBPAGEOPTIONS pOptions,IMimeMessageCallback *pCallback,IMoniker **ppMoniker) {
    return This->lpVtbl->CreateWebPage(This,pRootStm,pOptions,pCallback,ppMoniker);
}
static inline HRESULT IMimeMessage_GetProp(IMimeMessage* This,LPCSTR pszName,DWORD dwFlags,LPPROPVARIANT pValue) {
    return This->lpVtbl->GetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessage_SetProp(IMimeMessage* This,LPCSTR pszName,DWORD dwFlags,LPCPROPVARIANT pValue) {
    return This->lpVtbl->SetProp(This,pszName,dwFlags,pValue);
}
static inline HRESULT IMimeMessage_DeleteProp(IMimeMessage* This,LPCSTR pszName) {
    return This->lpVtbl->DeleteProp(This,pszName);
}
static inline HRESULT IMimeMessage_QueryProp(IMimeMessage* This,LPCSTR pszName,LPCSTR pszCriteria,boolean fSubString,boolean fCaseSensitive) {
    return This->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive);
}
static inline HRESULT IMimeMessage_GetTextBody(IMimeMessage* This,DWORD dwTxtType,ENCODINGTYPE ietEncoding,IStream **pStream,LPHBODY phBody) {
    return This->lpVtbl->GetTextBody(This,dwTxtType,ietEncoding,pStream,phBody);
}
static inline HRESULT IMimeMessage_SetTextBody(IMimeMessage* This,DWORD dwTxtType,ENCODINGTYPE ietEncoding,HBODY hAlternative,IStream *pStream,LPHBODY phBody) {
    return This->lpVtbl->SetTextBody(This,dwTxtType,ietEncoding,hAlternative,pStream,phBody);
}
static inline HRESULT IMimeMessage_AttachObject(IMimeMessage* This,REFIID riid,void *pvObject,LPHBODY phBody) {
    return This->lpVtbl->AttachObject(This,riid,pvObject,phBody);
}
static inline HRESULT IMimeMessage_AttachFile(IMimeMessage* This,LPCSTR pszFilePath,IStream *pstmFile,LPHBODY phBody) {
    return This->lpVtbl->AttachFile(This,pszFilePath,pstmFile,phBody);
}
static inline HRESULT IMimeMessage_AttachURL(IMimeMessage* This,LPCSTR pszBase,LPCSTR pszURL,DWORD dwFlags,IStream *pstmURL,LPSTR *ppszCIDURL,LPHBODY phBody) {
    return This->lpVtbl->AttachURL(This,pszBase,pszURL,dwFlags,pstmURL,ppszCIDURL,phBody);
}
static inline HRESULT IMimeMessage_GetAttachments(IMimeMessage* This,ULONG *pcAttach,LPHBODY *pprghAttach) {
    return This->lpVtbl->GetAttachments(This,pcAttach,pprghAttach);
}
static inline HRESULT IMimeMessage_GetAddressTable(IMimeMessage* This,IMimeAddressTable **ppTable) {
    return This->lpVtbl->GetAddressTable(This,ppTable);
}
static inline HRESULT IMimeMessage_GetSender(IMimeMessage* This,LPADDRESSPROPS pAddress) {
    return This->lpVtbl->GetSender(This,pAddress);
}
static inline HRESULT IMimeMessage_GetAddressTypes(IMimeMessage* This,DWORD dwAdrTypes,DWORD dwProps,LPADDRESSLIST pList) {
    return This->lpVtbl->GetAddressTypes(This,dwAdrTypes,dwProps,pList);
}
static inline HRESULT IMimeMessage_GetAddressFormat(IMimeMessage* This,DWORD dwAdrTypes,ADDRESSFORMAT format,LPSTR *ppszFormat) {
    return This->lpVtbl->GetAddressFormat(This,dwAdrTypes,format,ppszFormat);
}
static inline HRESULT IMimeMessage_EnumAddressTypes(IMimeMessage* This,DWORD dwAdrTypes,DWORD dwProps,IMimeEnumAddressTypes **ppEnum) {
    return This->lpVtbl->EnumAddressTypes(This,dwAdrTypes,dwProps,ppEnum);
}
static inline HRESULT IMimeMessage_SplitMessage(IMimeMessage* This,ULONG cbMaxPart,IMimeMessageParts **ppParts) {
    return This->lpVtbl->SplitMessage(This,cbMaxPart,ppParts);
}
static inline HRESULT IMimeMessage_GetRootMoniker(IMimeMessage* This,IMoniker **ppMoniker) {
    return This->lpVtbl->GetRootMoniker(This,ppMoniker);
}
#endif
#endif

#endif


#endif  /* __IMimeMessage_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageCallback interface
 */
#ifndef __IMimeMessageCallback_INTERFACE_DEFINED__
#define __IMimeMessageCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeMessageCallback, 0x761aa641, 0x7bda, 0x11d1, 0x8a,0xa9, 0x00,0xc0,0x4f,0xb9,0x51,0xf3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("761aa641-7bda-11d1-8aa9-00c04fb951f3")
IMimeMessageCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnWebPageSplitter(
        DWORD cInlined,
        IStream *ppStream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeMessageCallback, 0x761aa641, 0x7bda, 0x11d1, 0x8a,0xa9, 0x00,0xc0,0x4f,0xb9,0x51,0xf3)
#endif
#else
typedef struct IMimeMessageCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageCallback *This);

    /*** IMimeMessageCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnWebPageSplitter)(
        IMimeMessageCallback *This,
        DWORD cInlined,
        IStream *ppStream);

    END_INTERFACE
} IMimeMessageCallbackVtbl;

interface IMimeMessageCallback {
    CONST_VTBL IMimeMessageCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeMessageCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeMessageCallback methods ***/
#define IMimeMessageCallback_OnWebPageSplitter(This,cInlined,ppStream) (This)->lpVtbl->OnWebPageSplitter(This,cInlined,ppStream)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeMessageCallback_QueryInterface(IMimeMessageCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeMessageCallback_AddRef(IMimeMessageCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeMessageCallback_Release(IMimeMessageCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeMessageCallback methods ***/
static inline HRESULT IMimeMessageCallback_OnWebPageSplitter(IMimeMessageCallback* This,DWORD cInlined,IStream *ppStream) {
    return This->lpVtbl->OnWebPageSplitter(This,cInlined,ppStream);
}
#endif
#endif

#endif


#endif  /* __IMimeMessageCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPersistMime interface
 */
#ifndef __IPersistMime_INTERFACE_DEFINED__
#define __IPersistMime_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPersistMime, 0xde4ad8da, 0x555f, 0x11d1, 0x8d,0xd0, 0x00,0xc0,0x4f,0xb9,0x51,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("de4ad8da-555f-11d1-8dd0-00c04fb951f9")
IPersistMime : public IPersist
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPersistMime, 0xde4ad8da, 0x555f, 0x11d1, 0x8d,0xd0, 0x00,0xc0,0x4f,0xb9,0x51,0xf9)
#endif
#else
typedef struct IPersistMimeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPersistMime *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPersistMime *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPersistMime *This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IPersistMime *This,
        CLSID *pClassID);

    END_INTERFACE
} IPersistMimeVtbl;

interface IPersistMime {
    CONST_VTBL IPersistMimeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPersistMime_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPersistMime_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPersistMime_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IPersistMime_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
#else
/*** IUnknown methods ***/
static inline HRESULT IPersistMime_QueryInterface(IPersistMime* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IPersistMime_AddRef(IPersistMime* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IPersistMime_Release(IPersistMime* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static inline HRESULT IPersistMime_GetClassID(IPersistMime* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
#endif
#endif

#endif


#endif  /* __IPersistMime_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageParts interface
 */
#ifndef __IMimeMessageParts_INTERFACE_DEFINED__
#define __IMimeMessageParts_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeMessageParts, 0xc558834f, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c558834f-7f86-11d0-8252-00c04fd85ab4")
IMimeMessageParts : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeMessageParts, 0xc558834f, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeMessagePartsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageParts *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageParts *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageParts *This);

    END_INTERFACE
} IMimeMessagePartsVtbl;

interface IMimeMessageParts {
    CONST_VTBL IMimeMessagePartsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeMessageParts_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageParts_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageParts_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeMessageParts_QueryInterface(IMimeMessageParts* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeMessageParts_AddRef(IMimeMessageParts* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeMessageParts_Release(IMimeMessageParts* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeMessageParts_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumProperties interface
 */
#ifndef __IMimeEnumProperties_INTERFACE_DEFINED__
#define __IMimeEnumProperties_INTERFACE_DEFINED__

typedef IMimeEnumProperties *LPMIMEENUMPROPERTIES;
typedef struct tagENUMPROPERTY {
    LPSTR pszName;
    HHEADERROW hRow;
    DWORD dwPropId;
} ENUMPROPERTY;
typedef struct tagENUMPROPERTY *LPENUMPROPERTY;
DEFINE_GUID(IID_IMimeEnumProperties, 0xfd853cee, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fd853cee-7f86-11d0-8252-00c04fd85ab4")
IMimeEnumProperties : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cFetch,
        LPENUMPROPERTY prgProp,
        ULONG *pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cItems) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimeEnumProperties **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Count(
        ULONG *pcItems) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEnumProperties, 0xfd853cee, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeEnumPropertiesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumProperties *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumProperties *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumProperties *This);

    /*** IMimeEnumProperties methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IMimeEnumProperties *This,
        ULONG cFetch,
        LPENUMPROPERTY prgProp,
        ULONG *pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IMimeEnumProperties *This,
        ULONG cItems);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IMimeEnumProperties *This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeEnumProperties *This,
        IMimeEnumProperties **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Count)(
        IMimeEnumProperties *This,
        ULONG *pcItems);

    END_INTERFACE
} IMimeEnumPropertiesVtbl;

interface IMimeEnumProperties {
    CONST_VTBL IMimeEnumPropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEnumProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumProperties_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeEnumProperties methods ***/
#define IMimeEnumProperties_Next(This,cFetch,prgProp,pcFetched) (This)->lpVtbl->Next(This,cFetch,prgProp,pcFetched)
#define IMimeEnumProperties_Skip(This,cItems) (This)->lpVtbl->Skip(This,cItems)
#define IMimeEnumProperties_Reset(This) (This)->lpVtbl->Reset(This)
#define IMimeEnumProperties_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IMimeEnumProperties_Count(This,pcItems) (This)->lpVtbl->Count(This,pcItems)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEnumProperties_QueryInterface(IMimeEnumProperties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEnumProperties_AddRef(IMimeEnumProperties* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEnumProperties_Release(IMimeEnumProperties* This) {
    return This->lpVtbl->Release(This);
}
/*** IMimeEnumProperties methods ***/
static inline HRESULT IMimeEnumProperties_Next(IMimeEnumProperties* This,ULONG cFetch,LPENUMPROPERTY prgProp,ULONG *pcFetched) {
    return This->lpVtbl->Next(This,cFetch,prgProp,pcFetched);
}
static inline HRESULT IMimeEnumProperties_Skip(IMimeEnumProperties* This,ULONG cItems) {
    return This->lpVtbl->Skip(This,cItems);
}
static inline HRESULT IMimeEnumProperties_Reset(IMimeEnumProperties* This) {
    return This->lpVtbl->Reset(This);
}
static inline HRESULT IMimeEnumProperties_Clone(IMimeEnumProperties* This,IMimeEnumProperties **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
static inline HRESULT IMimeEnumProperties_Count(IMimeEnumProperties* This,ULONG *pcItems) {
    return This->lpVtbl->Count(This,pcItems);
}
#endif
#endif

#endif


#endif  /* __IMimeEnumProperties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumAddressTypes interface
 */
#ifndef __IMimeEnumAddressTypes_INTERFACE_DEFINED__
#define __IMimeEnumAddressTypes_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEnumAddressTypes, 0xc5588354, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c5588354-7f86-11d0-8252-00c04fd85ab4")
IMimeEnumAddressTypes : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEnumAddressTypes, 0xc5588354, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeEnumAddressTypesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumAddressTypes *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumAddressTypes *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumAddressTypes *This);

    END_INTERFACE
} IMimeEnumAddressTypesVtbl;

interface IMimeEnumAddressTypes {
    CONST_VTBL IMimeEnumAddressTypesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEnumAddressTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumAddressTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumAddressTypes_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEnumAddressTypes_QueryInterface(IMimeEnumAddressTypes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEnumAddressTypes_AddRef(IMimeEnumAddressTypes* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEnumAddressTypes_Release(IMimeEnumAddressTypes* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeEnumAddressTypes_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumMessageParts interface
 */
#ifndef __IMimeEnumMessageParts_INTERFACE_DEFINED__
#define __IMimeEnumMessageParts_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEnumMessageParts, 0xc5588350, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c5588350-7f86-11d0-8252-00c04fd85ab4")
IMimeEnumMessageParts : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEnumMessageParts, 0xc5588350, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeEnumMessagePartsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumMessageParts *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumMessageParts *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumMessageParts *This);

    END_INTERFACE
} IMimeEnumMessagePartsVtbl;

interface IMimeEnumMessageParts {
    CONST_VTBL IMimeEnumMessagePartsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEnumMessageParts_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumMessageParts_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumMessageParts_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEnumMessageParts_QueryInterface(IMimeEnumMessageParts* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEnumMessageParts_AddRef(IMimeEnumMessageParts* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEnumMessageParts_Release(IMimeEnumMessageParts* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeEnumMessageParts_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IHashTable interface
 */
#ifndef __IHashTable_INTERFACE_DEFINED__
#define __IHashTable_INTERFACE_DEFINED__

DEFINE_GUID(IID_IHashTable, 0x64577981, 0x86d7, 0x11d1, 0xbd,0xfc, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("64577981-86d7-11d1-bdfc-00c04fa31009")
IHashTable : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IHashTable, 0x64577981, 0x86d7, 0x11d1, 0xbd,0xfc, 0x00,0xc0,0x4f,0xa3,0x10,0x09)
#endif
#else
typedef struct IHashTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IHashTable *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IHashTable *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IHashTable *This);

    END_INTERFACE
} IHashTableVtbl;

interface IHashTable {
    CONST_VTBL IHashTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IHashTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHashTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHashTable_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IHashTable_QueryInterface(IHashTable* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IHashTable_AddRef(IHashTable* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IHashTable_Release(IHashTable* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IHashTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeAllocator interface
 */
#ifndef __IMimeAllocator_INTERFACE_DEFINED__
#define __IMimeAllocator_INTERFACE_DEFINED__

typedef IMimeAllocator *LPMIMEALLOCATOR;
DEFINE_GUID(IID_IMimeAllocator, 0xc5588351, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c5588351-7f86-11d0-8252-00c04fd85ab4")
IMimeAllocator : public IMalloc
{
    virtual HRESULT STDMETHODCALLTYPE FreeParamInfoArray(
        ULONG cParams,
        LPMIMEPARAMINFO prgParam,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeAddressList(
        LPADDRESSLIST pList) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeAddressProps(
        LPADDRESSPROPS pAddress) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseObjects(
        ULONG cObjects,
        IUnknown **prgpUnknown,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeEnumHeaderRowArray(
        ULONG cRows,
        LPENUMHEADERROW prgRow,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeEnumPropertyArray(
        ULONG cProps,
        LPENUMPROPERTY prgProp,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeThumbprint(
        THUMBBLOB *pthumbprint) = 0;

    virtual HRESULT STDMETHODCALLTYPE PropVariantClear(
        LPPROPVARIANT pProp) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeAllocator, 0xc5588351, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IMimeAllocatorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeAllocator *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeAllocator *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeAllocator *This);

    /*** IMalloc methods ***/
    LPVOID (STDMETHODCALLTYPE *Alloc)(
        IMimeAllocator *This,
        SIZE_T cb);

    LPVOID (STDMETHODCALLTYPE *Realloc)(
        IMimeAllocator *This,
        LPVOID pv,
        SIZE_T cb);

    void (STDMETHODCALLTYPE *Free)(
        IMimeAllocator *This,
        LPVOID pv);

    SIZE_T (STDMETHODCALLTYPE *GetSize)(
        IMimeAllocator *This,
        LPVOID pv);

    int (STDMETHODCALLTYPE *DidAlloc)(
        IMimeAllocator *This,
        LPVOID pv);

    void (STDMETHODCALLTYPE *HeapMinimize)(
        IMimeAllocator *This);

    /*** IMimeAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *FreeParamInfoArray)(
        IMimeAllocator *This,
        ULONG cParams,
        LPMIMEPARAMINFO prgParam,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeAddressList)(
        IMimeAllocator *This,
        LPADDRESSLIST pList);

    HRESULT (STDMETHODCALLTYPE *FreeAddressProps)(
        IMimeAllocator *This,
        LPADDRESSPROPS pAddress);

    HRESULT (STDMETHODCALLTYPE *ReleaseObjects)(
        IMimeAllocator *This,
        ULONG cObjects,
        IUnknown **prgpUnknown,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeEnumHeaderRowArray)(
        IMimeAllocator *This,
        ULONG cRows,
        LPENUMHEADERROW prgRow,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeEnumPropertyArray)(
        IMimeAllocator *This,
        ULONG cProps,
        LPENUMPROPERTY prgProp,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeThumbprint)(
        IMimeAllocator *This,
        THUMBBLOB *pthumbprint);

    HRESULT (STDMETHODCALLTYPE *PropVariantClear)(
        IMimeAllocator *This,
        LPPROPVARIANT pProp);

    END_INTERFACE
} IMimeAllocatorVtbl;

interface IMimeAllocator {
    CONST_VTBL IMimeAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IMalloc methods ***/
#define IMimeAllocator_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)
#define IMimeAllocator_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)
#define IMimeAllocator_Free(This,pv) (This)->lpVtbl->Free(This,pv)
#define IMimeAllocator_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)
#define IMimeAllocator_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)
#define IMimeAllocator_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)
/*** IMimeAllocator methods ***/
#define IMimeAllocator_FreeParamInfoArray(This,cParams,prgParam,fFreeArray) (This)->lpVtbl->FreeParamInfoArray(This,cParams,prgParam,fFreeArray)
#define IMimeAllocator_FreeAddressList(This,pList) (This)->lpVtbl->FreeAddressList(This,pList)
#define IMimeAllocator_FreeAddressProps(This,pAddress) (This)->lpVtbl->FreeAddressProps(This,pAddress)
#define IMimeAllocator_ReleaseObjects(This,cObjects,prgpUnknown,fFreeArray) (This)->lpVtbl->ReleaseObjects(This,cObjects,prgpUnknown,fFreeArray)
#define IMimeAllocator_FreeEnumHeaderRowArray(This,cRows,prgRow,fFreeArray) (This)->lpVtbl->FreeEnumHeaderRowArray(This,cRows,prgRow,fFreeArray)
#define IMimeAllocator_FreeEnumPropertyArray(This,cProps,prgProp,fFreeArray) (This)->lpVtbl->FreeEnumPropertyArray(This,cProps,prgProp,fFreeArray)
#define IMimeAllocator_FreeThumbprint(This,pthumbprint) (This)->lpVtbl->FreeThumbprint(This,pthumbprint)
#define IMimeAllocator_PropVariantClear(This,pProp) (This)->lpVtbl->PropVariantClear(This,pProp)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeAllocator_QueryInterface(IMimeAllocator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeAllocator_AddRef(IMimeAllocator* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeAllocator_Release(IMimeAllocator* This) {
    return This->lpVtbl->Release(This);
}
/*** IMalloc methods ***/
static inline LPVOID IMimeAllocator_Alloc(IMimeAllocator* This,SIZE_T cb) {
    return This->lpVtbl->Alloc(This,cb);
}
static inline LPVOID IMimeAllocator_Realloc(IMimeAllocator* This,LPVOID pv,SIZE_T cb) {
    return This->lpVtbl->Realloc(This,pv,cb);
}
static inline void IMimeAllocator_Free(IMimeAllocator* This,LPVOID pv) {
    This->lpVtbl->Free(This,pv);
}
static inline SIZE_T IMimeAllocator_GetSize(IMimeAllocator* This,LPVOID pv) {
    return This->lpVtbl->GetSize(This,pv);
}
static inline int IMimeAllocator_DidAlloc(IMimeAllocator* This,LPVOID pv) {
    return This->lpVtbl->DidAlloc(This,pv);
}
static inline void IMimeAllocator_HeapMinimize(IMimeAllocator* This) {
    This->lpVtbl->HeapMinimize(This);
}
/*** IMimeAllocator methods ***/
static inline HRESULT IMimeAllocator_FreeParamInfoArray(IMimeAllocator* This,ULONG cParams,LPMIMEPARAMINFO prgParam,boolean fFreeArray) {
    return This->lpVtbl->FreeParamInfoArray(This,cParams,prgParam,fFreeArray);
}
static inline HRESULT IMimeAllocator_FreeAddressList(IMimeAllocator* This,LPADDRESSLIST pList) {
    return This->lpVtbl->FreeAddressList(This,pList);
}
static inline HRESULT IMimeAllocator_FreeAddressProps(IMimeAllocator* This,LPADDRESSPROPS pAddress) {
    return This->lpVtbl->FreeAddressProps(This,pAddress);
}
static inline HRESULT IMimeAllocator_ReleaseObjects(IMimeAllocator* This,ULONG cObjects,IUnknown **prgpUnknown,boolean fFreeArray) {
    return This->lpVtbl->ReleaseObjects(This,cObjects,prgpUnknown,fFreeArray);
}
static inline HRESULT IMimeAllocator_FreeEnumHeaderRowArray(IMimeAllocator* This,ULONG cRows,LPENUMHEADERROW prgRow,boolean fFreeArray) {
    return This->lpVtbl->FreeEnumHeaderRowArray(This,cRows,prgRow,fFreeArray);
}
static inline HRESULT IMimeAllocator_FreeEnumPropertyArray(IMimeAllocator* This,ULONG cProps,LPENUMPROPERTY prgProp,boolean fFreeArray) {
    return This->lpVtbl->FreeEnumPropertyArray(This,cProps,prgProp,fFreeArray);
}
static inline HRESULT IMimeAllocator_FreeThumbprint(IMimeAllocator* This,THUMBBLOB *pthumbprint) {
    return This->lpVtbl->FreeThumbprint(This,pthumbprint);
}
static inline HRESULT IMimeAllocator_PropVariantClear(IMimeAllocator* This,LPPROPVARIANT pProp) {
    return This->lpVtbl->PropVariantClear(This,pProp);
}
#endif
#endif

#endif


#endif  /* __IMimeAllocator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeObjResolver interface
 */
#ifndef __IMimeObjResolver_INTERFACE_DEFINED__
#define __IMimeObjResolver_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeObjResolver, 0xfeceaffd, 0xc441, 0x11d1, 0x96,0x0e, 0x00,0xc0,0x4f,0xbd,0x7c,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("feceaffd-c441-11d1-960e-00c04fbd7c09")
IMimeObjResolver : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeObjResolver, 0xfeceaffd, 0xc441, 0x11d1, 0x96,0x0e, 0x00,0xc0,0x4f,0xbd,0x7c,0x09)
#endif
#else
typedef struct IMimeObjResolverVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeObjResolver *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeObjResolver *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeObjResolver *This);

    END_INTERFACE
} IMimeObjResolverVtbl;

interface IMimeObjResolver {
    CONST_VTBL IMimeObjResolverVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeObjResolver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeObjResolver_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeObjResolver_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeObjResolver_QueryInterface(IMimeObjResolver* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeObjResolver_AddRef(IMimeObjResolver* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeObjResolver_Release(IMimeObjResolver* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeObjResolver_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IFontCache interface
 */
#ifndef __IFontCache_INTERFACE_DEFINED__
#define __IFontCache_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFontCache, 0xb0d17fc2, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b0d17fc2-7bc4-11d1-bdfa-00c04fa31009")
IFontCache : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFontCache, 0xb0d17fc2, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09)
#endif
#else
typedef struct IFontCacheVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFontCache *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFontCache *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFontCache *This);

    END_INTERFACE
} IFontCacheVtbl;

interface IFontCache {
    CONST_VTBL IFontCacheVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFontCache_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFontCache_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFontCache_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IFontCache_QueryInterface(IFontCache* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IFontCache_AddRef(IFontCache* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IFontCache_Release(IFontCache* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IFontCache_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IFontCacheNotify interface
 */
#ifndef __IFontCacheNotify_INTERFACE_DEFINED__
#define __IFontCacheNotify_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFontCacheNotify, 0xb0d17fc5, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b0d17fc5-7bc4-11d1-bdfa-00c04fa31009")
IFontCacheNotify : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IFontCacheNotify, 0xb0d17fc5, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09)
#endif
#else
typedef struct IFontCacheNotifyVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFontCacheNotify *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFontCacheNotify *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFontCacheNotify *This);

    END_INTERFACE
} IFontCacheNotifyVtbl;

interface IFontCacheNotify {
    CONST_VTBL IFontCacheNotifyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IFontCacheNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFontCacheNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFontCacheNotify_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IFontCacheNotify_QueryInterface(IFontCacheNotify* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IFontCacheNotify_AddRef(IFontCacheNotify* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IFontCacheNotify_Release(IFontCacheNotify* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IFontCacheNotify_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEditTag interface
 */
#ifndef __IMimeEditTag_INTERFACE_DEFINED__
#define __IMimeEditTag_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEditTag, 0x70183210, 0x7b36, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("70183210-7b36-11d2-8c12-00c04fa31009")
IMimeEditTag : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEditTag, 0x70183210, 0x7b36, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09)
#endif
#else
typedef struct IMimeEditTagVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEditTag *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEditTag *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEditTag *This);

    END_INTERFACE
} IMimeEditTagVtbl;

interface IMimeEditTag {
    CONST_VTBL IMimeEditTagVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEditTag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEditTag_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEditTag_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEditTag_QueryInterface(IMimeEditTag* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEditTag_AddRef(IMimeEditTag* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEditTag_Release(IMimeEditTag* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeEditTag_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEditTagCollection interface
 */
#ifndef __IMimeEditTagCollection_INTERFACE_DEFINED__
#define __IMimeEditTagCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEditTagCollection, 0xd09ee528, 0x7b38, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d09ee528-7b38-11d2-8c12-00c04fa31009")
IMimeEditTagCollection : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeEditTagCollection, 0xd09ee528, 0x7b38, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09)
#endif
#else
typedef struct IMimeEditTagCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEditTagCollection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEditTagCollection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEditTagCollection *This);

    END_INTERFACE
} IMimeEditTagCollectionVtbl;

interface IMimeEditTagCollection {
    CONST_VTBL IMimeEditTagCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeEditTagCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEditTagCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEditTagCollection_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeEditTagCollection_QueryInterface(IMimeEditTagCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeEditTagCollection_AddRef(IMimeEditTagCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeEditTagCollection_Release(IMimeEditTagCollection* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeEditTagCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeSecurityCallback interface
 */
#ifndef __IMimeSecurityCallback_INTERFACE_DEFINED__
#define __IMimeSecurityCallback_INTERFACE_DEFINED__

#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN                0
#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS               1
#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE               2
#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST              3
#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE          0
#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS             1
#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER             2
#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE   3
#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE      4
#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE           0
#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL          1
#define CMS_RECIPIENT_INFO_KEYID_KEY_ID                2
DEFINE_GUID(IID_IMimeSecurityCallback, 0xba715ae0, 0xa740, 0x11d2, 0x8b,0x22, 0x00,0x80,0xc7,0x6b,0x34,0xc6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ba715ae0-a740-11d2-8b22-0080c76b34c6")
IMimeSecurityCallback : public IUnknown
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IMimeSecurityCallback, 0xba715ae0, 0xa740, 0x11d2, 0x8b,0x22, 0x00,0x80,0xc7,0x6b,0x34,0xc6)
#endif
#else
typedef struct IMimeSecurityCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeSecurityCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeSecurityCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeSecurityCallback *This);

    END_INTERFACE
} IMimeSecurityCallbackVtbl;

interface IMimeSecurityCallback {
    CONST_VTBL IMimeSecurityCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IMimeSecurityCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeSecurityCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeSecurityCallback_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IMimeSecurityCallback_QueryInterface(IMimeSecurityCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IMimeSecurityCallback_AddRef(IMimeSecurityCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IMimeSecurityCallback_Release(IMimeSecurityCallback* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IMimeSecurityCallback_INTERFACE_DEFINED__ */

#endif /* __MIMEOLE_LIBRARY_DEFINED__ */

MIMEOLEAPI MimeOleSetCompatMode(DWORD);
MIMEOLEAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);
MIMEOLEAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);
MIMEOLEAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);
MIMEOLEAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);
MIMEOLEAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);
MIMEOLEAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);
MIMEOLEAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);
MIMEOLEAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);
MIMEOLEAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);
MIMEOLEAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);
MIMEOLEAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);
MIMEOLEAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);
MIMEOLEAPI MimeOleCreateByteStream(IStream**);
MIMEOLEAPI MimeOlGetPropertySchema(IMimePropertySchema**);
MIMEOLEAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);
MIMEOLEAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);
MIMEOLEAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);
MIMEOLEAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);
MIMEOLEAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);
MIMEOLEAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);
MIMEOLEAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);
MIMEOLEAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);
MIMEOLEAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);
MIMEOLEAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);
MIMEOLEAPI MimeOleVariantFree(LPPROPVARIANT);
MIMEOLEAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);
MIMEOLEAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);
MIMEOLEAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);
MIMEOLEAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);
MIMEOLEAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);
MIMEOLEAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);
MIMEOLEAPI MimeOleGetInternat(IMimeInternational**);
MIMEOLEAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);
MIMEOLEAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);
MIMEOLEAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);
MIMEOLEAPI MimeOleGetDefaultCharset(LPHCHARSET);
MIMEOLEAPI MimeOleSetDefaultCharset(HCHARSET);
MIMEOLEAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);
MIMEOLEAPI MimeOleCreateVirtualStream(IStream**);
MIMEOLEAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);
MIMEOLEAPI MimeOleIsTnefStream(IStream*);
MIMEOLEAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);
MIMEOLEAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);
MIMEOLEAPI MimeOleCreateSecurity(IMimeSecurity**);
MIMEOLEAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);
MIMEOLEAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);
MIMEOLEAPI MimeOleCreateMessageParts(IMimeMessageParts**);
MIMEOLEAPI MimeOleGetAllocator(IMimeAllocator**);
MIMEOLEAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);
MIMEOLEAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);
MIMEOLEAPI MimeOleMergePartialHeaders(IStream*,IStream*);
MIMEOLEAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);
MIMEOLEAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);
MIMEOLEAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);
MIMEOLEAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);
MIMEOLEAPI MimeOleCreateBody(IMimeBody**);
MIMEOLEAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);
MIMEOLEAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);
MIMEOLEAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);
MIMEOLEAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);
MIMEOLEAPI MimeOleClearDirtyTree(IMimeMessageTree*);
MIMEOLEAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);
MIMEOLEAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);
MIMEOLEAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);
MIMEOLEAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);
MIMEOLEAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);
MIMEOLEAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);
MIMEOLEAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);
MIMEOLEAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);
MIMEOLEAPI MimeOleSMimeCapRelease(LPVOID);
MIMEOLEAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);
MIMEOLEAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);
MIMEOLEAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);
MIMEOLEAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);
MIMEOLEAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);
MIMEOLEAPI MimeEditViewSource(HWND,IMimeMessage*);
MIMEOLEAPI MimeEditIsSafeToRun(HWND,LPCSTR);
MIMEOLEAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);
MIMEOLEAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);
MIMEOLEAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);
MIMEOLEAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);
MIMEOLEAPI MimeOleGetPropertySchema(IMimePropertySchema**);
MIMEOLEAPI MimeGetAddressFormatW(REFIID,void*,DWORD,ADDRESSFORMAT,WCHAR**);
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);
ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __mimeole_h__ */
