📄 mapival.h
字号:
/*
* 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 + -