⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapival.h

📁 希望我上传的这些东西可以对搞编程的程序员有点小小的帮助!谢谢!
💻 H
📖 第 1 页 / 共 5 页
字号:
/*
 *  M A P I V A L . H
 *  
 *  Macros used to validate parameters on standard MAPI object methods.
 *  Used in conjunction with routines found in MAPIU.DLL.
 *  
 *  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
 */

#ifndef _INC_VALIDATE
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define _INC_VALIDATE

#ifdef __cplusplus
extern "C" {
#endif

#ifndef MAPIUTIL_H
#include    <mapiutil.h>
#endif
#include    <stddef.h>
#include    <stdarg.h>


#define MAKE_ENUM(Method, Interface)    Interface##_##Method

typedef enum _tagMethods
{
/* IUnknown */
    MAKE_ENUM(QueryInterface, IUnknown) = 0,
    MAKE_ENUM(AddRef, IUnknown),            /* For completness */
    MAKE_ENUM(Release, IUnknown),           /* For completness */
    
/* IMAPIProps */
    MAKE_ENUM(GetLastError, IMAPIProp),
    MAKE_ENUM(SaveChanges, IMAPIProp),
    MAKE_ENUM(GetProps, IMAPIProp),
    MAKE_ENUM(GetPropList, IMAPIProp),
    MAKE_ENUM(OpenProperty, IMAPIProp),
    MAKE_ENUM(SetProps, IMAPIProp),
    MAKE_ENUM(DeleteProps, IMAPIProp),
    MAKE_ENUM(CopyTo, IMAPIProp),
    MAKE_ENUM(CopyProps, IMAPIProp),
    MAKE_ENUM(GetNamesFromIDs, IMAPIProp),
    MAKE_ENUM(GetIDsFromNames, IMAPIProp),

/* IMAPITable */
    MAKE_ENUM(GetLastError, IMAPITable),
    MAKE_ENUM(Advise, IMAPITable),
    MAKE_ENUM(Unadvise, IMAPITable),
    MAKE_ENUM(GetStatus, IMAPITable),
    MAKE_ENUM(SetColumns, IMAPITable),
    MAKE_ENUM(QueryColumns, IMAPITable),
    MAKE_ENUM(GetRowCount, IMAPITable),
    MAKE_ENUM(SeekRow, IMAPITable),
    MAKE_ENUM(SeekRowApprox, IMAPITable),
    MAKE_ENUM(QueryPosition, IMAPITable),
    MAKE_ENUM(FindRow, IMAPITable),
    MAKE_ENUM(Restrict, IMAPITable),
    MAKE_ENUM(CreateBookmark, IMAPITable),
    MAKE_ENUM(FreeBookmark, IMAPITable),
    MAKE_ENUM(SortTable, IMAPITable),
    MAKE_ENUM(QuerySortOrder, IMAPITable),
    MAKE_ENUM(QueryRows, IMAPITable),
    MAKE_ENUM(Abort, IMAPITable),
    MAKE_ENUM(ExpandRow, IMAPITable),
    MAKE_ENUM(CollapseRow, IMAPITable),
    MAKE_ENUM(WaitForCompletion, IMAPITable),
    MAKE_ENUM(GetCollapseState, IMAPITable),
    MAKE_ENUM(SetCollapseState, IMAPITable),

/* IMAPIContainer */
    MAKE_ENUM(GetContentsTable, IMAPIContainer),
    MAKE_ENUM(GetHierarchyTable, IMAPIContainer),
    MAKE_ENUM(OpenEntry, IMAPIContainer),
    MAKE_ENUM(SetSearchCriteria, IMAPIContainer),
    MAKE_ENUM(GetSearchCriteria, IMAPIContainer),

/* IABContainer */
    MAKE_ENUM(CreateEntry, IABContainer),
    MAKE_ENUM(CopyEntries, IABContainer),
    MAKE_ENUM(DeleteEntries, IABContainer),
    MAKE_ENUM(ResolveNames, IABContainer),

/* IDistList */
    MAKE_ENUM(CreateEntry, IDistList),
    MAKE_ENUM(CopyEntries, IDistList),
    MAKE_ENUM(DeleteEntries, IDistList),
    MAKE_ENUM(ResolveNames, IDistList),

/* IMAPIFolder */
    MAKE_ENUM(CreateMessage, IMAPIFolder),
    MAKE_ENUM(CopyMessages, IMAPIFolder),
    MAKE_ENUM(DeleteMessages, IMAPIFolder),
    MAKE_ENUM(CreateFolder, IMAPIFolder),
    MAKE_ENUM(CopyFolder, IMAPIFolder),
    MAKE_ENUM(DeleteFolder, IMAPIFolder),
    MAKE_ENUM(SetReadFlags, IMAPIFolder),
    MAKE_ENUM(GetMessageStatus, IMAPIFolder),
    MAKE_ENUM(SetMessageStatus, IMAPIFolder),
    MAKE_ENUM(SaveContentsSort, IMAPIFolder),
    MAKE_ENUM(EmptyFolder, IMAPIFolder),

/* IMsgStore */
    MAKE_ENUM(Advise, IMsgStore),
    MAKE_ENUM(Unadvise, IMsgStore),
    MAKE_ENUM(CompareEntryIDs, IMsgStore),
    MAKE_ENUM(OpenEntry, IMsgStore),
    MAKE_ENUM(SetReceiveFolder, IMsgStore),
    MAKE_ENUM(GetReceiveFolder, IMsgStore),
    MAKE_ENUM(GetReceiveFolderTable, IMsgStore),
    MAKE_ENUM(StoreLogoff, IMsgStore),
    MAKE_ENUM(AbortSubmit, IMsgStore),
    MAKE_ENUM(GetOutgoingQueue, IMsgStore),
    MAKE_ENUM(SetLockState, IMsgStore),
    MAKE_ENUM(FinishedMsg, IMsgStore),
    MAKE_ENUM(NotifyNewMail, IMsgStore),

/* IMessage */
    MAKE_ENUM(GetAttachmentTable, IMessage),
    MAKE_ENUM(OpenAttach, IMessage),
    MAKE_ENUM(CreateAttach, IMessage),
    MAKE_ENUM(DeleteAttach, IMessage),
    MAKE_ENUM(GetRecipientTable, IMessage),
    MAKE_ENUM(ModifyRecipients, IMessage),
    MAKE_ENUM(SubmitMessage, IMessage),
    MAKE_ENUM(SetReadFlag, IMessage),


/* IABProvider */
    MAKE_ENUM(Shutdown, IABProvider),
    MAKE_ENUM(Logon, IABProvider),

/* IABLogon */
    MAKE_ENUM(GetLastError, IABLogon),
    MAKE_ENUM(Logoff, IABLogon),
    MAKE_ENUM(OpenEntry, IABLogon),
    MAKE_ENUM(CompareEntryIDs, IABLogon),
    MAKE_ENUM(Advise, IABLogon),
    MAKE_ENUM(Unadvise, IABLogon),
    MAKE_ENUM(OpenStatusEntry, IABLogon),
    MAKE_ENUM(OpenTemplateID, IABLogon),
    MAKE_ENUM(GetOneOffTable, IABLogon),
    MAKE_ENUM(PrepareRecips, IABLogon),

/* IXPProvider */
    MAKE_ENUM(Shutdown, IXPProvider),
    MAKE_ENUM(TransportLogon, IXPProvider),

/* IXPLogon */
    MAKE_ENUM(AddressTypes, IXPLogon),
    MAKE_ENUM(RegisterOptions, IXPLogon),
    MAKE_ENUM(TransportNotify, IXPLogon),
    MAKE_ENUM(Idle, IXPLogon),
    MAKE_ENUM(TransportLogoff, IXPLogon),
    MAKE_ENUM(SubmitMessage, IXPLogon),
    MAKE_ENUM(EndMessage, IXPLogon),
    MAKE_ENUM(Poll, IXPLogon),
    MAKE_ENUM(StartMessage, IXPLogon),
    MAKE_ENUM(OpenStatusEntry, IXPLogon),
    MAKE_ENUM(ValidateState, IXPLogon),
    MAKE_ENUM(FlushQueues, IXPLogon),

/* IMSProvider */
    MAKE_ENUM(Shutdown, IMSProvider),
    MAKE_ENUM(Logon, IMSProvider),
    MAKE_ENUM(SpoolerLogon, IMSProvider),
    MAKE_ENUM(CompareStoreIDs, IMSProvider),

/* IMSLogon */
    MAKE_ENUM(GetLastError, IMSLogon),
    MAKE_ENUM(Logoff, IMSLogon),
    MAKE_ENUM(OpenEntry, IMSLogon),
    MAKE_ENUM(CompareEntryIDs, IMSLogon),
    MAKE_ENUM(Advise, IMSLogon),
    MAKE_ENUM(Unadvise, IMSLogon),
    MAKE_ENUM(OpenStatusEntry, IMSLogon),
    
/* IMAPIControl */
    MAKE_ENUM(GetLastError, IMAPIControl),
    MAKE_ENUM(Activate, IMAPIControl),
    MAKE_ENUM(GetState, IMAPIControl),
    
/* IMAPIStatus */
    MAKE_ENUM(ValidateState, IMAPIStatus),
    MAKE_ENUM(SettingsDialog, IMAPIStatus),
    MAKE_ENUM(ChangePassword, IMAPIStatus),
    MAKE_ENUM(FlushQueues, IMAPIStatus),

/* IStream */
    MAKE_ENUM(Read, IStream),
    MAKE_ENUM(Write, IStream),
    MAKE_ENUM(Seek, IStream),
    MAKE_ENUM(SetSize, IStream),
    MAKE_ENUM(CopyTo, IStream),
    MAKE_ENUM(Commit, IStream),
    MAKE_ENUM(Revert, IStream),
    MAKE_ENUM(LockRegion, IStream),
    MAKE_ENUM(UnlockRegion, IStream),
    MAKE_ENUM(Stat, IStream),
    MAKE_ENUM(Clone, IStream),

/* IMAPIAdviseSink */
    MAKE_ENUM(OnNotify, IMAPIAdviseSink),

} METHODS;


/* Macro wrappers to hide the Validate function return handling */
#if defined(_X86_) || defined( WIN16 )
#ifdef __cplusplus

/* C++ methods can't take the address of the This pointer, so we must
   use the first parameter instead */

#define ValidateParameters(eMethod, First)              \
        {   HRESULT   _hr_;                             \
            _hr_ = __CPPValidateParameters(eMethod, (LPVOID) &First);   \
            if (HR_FAILED(_hr_)) return (_hr_); }

#define UlValidateParameters(eMethod, First)                \
        {   HRESULT   _hr_;                             \
            _hr_ = __CPPValidateParameters(eMethod, &First);    \
            if (HR_FAILED(_hr_)) return (ULONG) (_hr_); }

/* Methods called by MAPI should have correct parameters
   - just assert in Debug to check */
#define CheckParameters(eMethod, First)             \
        AssertSz(HR_SUCCEEDED(__CPPValidateParameters(eMethod, &First)), "Parameter validation failed for method called by MAPI!")


#else /* __cplusplus */

/* For methods that will be called by clients 
   - validate always */
   
#define ValidateParameters(eMethod, ppThis)             \
        {   HRESULT   _hr_;                             \
            _hr_ = __ValidateParameters(eMethod, ppThis);   \
            if (HR_FAILED(_hr_)) return (_hr_); }

#define UlValidateParameters(eMethod, ppThis)               \
        {   HRESULT   _hr_;                             \
            _hr_ = __ValidateParameters(eMethod, ppThis);   \
            if (HR_FAILED(_hr_)) return (ULONG) (_hr_); }

/* Methods called by MAPI should have correct parameters
   - just assert in Debug to check */
#define CheckParameters(eMethod, ppThis)                \
        AssertSz(HR_SUCCEEDED(__ValidateParameters(eMethod, ppThis)), "Parameter validation failed for method called by MAPI!")

#endif /* __cplusplus */
#endif /* _X86_ || WIN16 */

/* Prototypes for functions used to validate complex parameters.
 */
#define FBadPropVal( lpPropVal) (FAILED(ScCountProps( 1, lpPropVal, NULL)))

#define FBadRgPropVal( lpPropVal, cValues) \
        (FAILED(ScCountProps( cValues, lpPropVal, NULL)))

#define FBadAdrList( lpAdrList) \
        (   AssertSz(   (   offsetof( ADRLIST, cEntries) \
                         == offsetof( SRowSet, cRows)) \
                     && (   offsetof( ADRLIST, aEntries) \
                         == offsetof( SRowSet, aRow)) \
                     && (   offsetof( ADRENTRY, cValues) \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -