|
|
/*
* WABUTIL.H * * Definitions and prototypes for utility functions provided by MAPI * in MAPI[xx].DLL. * * Copyright 1986-1998 Microsoft Corporation. All Rights Reserved. */
#if !defined(_MAPIUTIL_H) && !defined(_WABUTIL_H)
#define _WABUTIL_H
#ifdef __cplusplus
extern "C" { #endif
#ifndef BEGIN_INTERFACE
#define BEGIN_INTERFACE
#endif
/* IMAPITable in memory */
/* ITableData Interface ---------------------------------------------------- */
DECLARE_MAPI_INTERFACE_PTR(ITableData, LPTABLEDATA);
typedef void (STDAPICALLTYPE CALLERRELEASE)( ULONG ulCallerData, LPTABLEDATA lpTblData, LPMAPITABLE lpVue );
#define MAPI_ITABLEDATA_METHODS(IPURE) \
MAPIMETHOD(HrGetView) \ (THIS_ LPSSortOrderSet lpSSortOrderSet, \ CALLERRELEASE FAR * lpfCallerRelease, \ ULONG ulCallerData, \ LPMAPITABLE FAR * lppMAPITable) IPURE; \ MAPIMETHOD(HrModifyRow) \ (THIS_ LPSRow) IPURE; \ MAPIMETHOD(HrDeleteRow) \ (THIS_ LPSPropValue lpSPropValue) IPURE; \ MAPIMETHOD(HrQueryRow) \ (THIS_ LPSPropValue lpsPropValue, \ LPSRow FAR * lppSRow, \ ULONG FAR * lpuliRow) IPURE; \ MAPIMETHOD(HrEnumRow) \ (THIS_ ULONG ulRowNumber, \ LPSRow FAR * lppSRow) IPURE; \ MAPIMETHOD(HrNotify) \ (THIS_ ULONG ulFlags, \ ULONG cValues, \ LPSPropValue lpSPropValue) IPURE; \ MAPIMETHOD(HrInsertRow) \ (THIS_ ULONG uliRow, \ LPSRow lpSRow) IPURE; \ MAPIMETHOD(HrModifyRows) \ (THIS_ ULONG ulFlags, \ LPSRowSet lpSRowSet) IPURE; \ MAPIMETHOD(HrDeleteRows) \ (THIS_ ULONG ulFlags, \ LPSRowSet lprowsetToDelete, \ ULONG FAR * cRowsDeleted) IPURE; \
#undef INTERFACE
#define INTERFACE ITableData
DECLARE_MAPI_INTERFACE_(ITableData, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) MAPI_ITABLEDATA_METHODS(PURE) };
/* Entry Point for in memory ITable */
/* CreateTable()
* Creates the internal memory structures and object handle * to bring a new table into existence. * * lpInterface * Interface ID of the TableData object (IID_IMAPITableData) * * lpAllocateBuffer, lpAllocateMore, and lpFreeBuffer * Function addresses are provided by the caller so that * this DLL allocates/frees memory appropriately. * lpvReserved * Reserved. Should be NULL. * ulTableType * TBLTYPE_DYNAMIC, etc. Visible to the calling application * as part of the GetStatus return data on its views * ulPropTagIndexColumn * Index column for use when changing the data * lpSPropTagArrayColumns * Column proptags for the minimum set of columns in the table * lppTableData * Address of the pointer which will receive the TableData object */
STDAPI_(SCODE) CreateTable( LPCIID lpInterface, ALLOCATEBUFFER FAR * lpAllocateBuffer, ALLOCATEMORE FAR * lpAllocateMore, FREEBUFFER FAR * lpFreeBuffer, LPVOID lpvReserved, ULONG ulTableType, ULONG ulPropTagIndexColumn, LPSPropTagArray lpSPropTagArrayColumns, LPTABLEDATA FAR * lppTableData );
/* HrGetView()
* This function obtains a new view on the underlying data * which supports the IMAPITable interface. All rows and columns * of the underlying table data are initially visible * lpSSortOrderSet * if specified, results in the view being sorted * lpfCallerRelease * pointer to a routine to be called when the view is released, or * NULL. * ulCallerData * arbitrary data the caller wants saved with this view and returned in * the Release callback. */
/* HrModifyRows()
* Add or modify a set of rows in the table data * ulFlags * Must be zero * lpSRowSet * Each row in the row set contains all the properties for one row * in the table. One of the properties must be the index column. Any * row in the table with the same value for its index column is * replaced, or if there is no current row with that value the * row is added. * Each row in LPSRowSet MUST have a unique Index column! * If any views are open, the view is updated as well. * The properties do not have to be in the same order as the * columns in the current table */
/* HrModifyRow()
* Add or modify one row in the table * lpSRow * This row contains all the properties for one row in the table. * One of the properties must be the index column. Any row in * the table with the same value for its index column is * replaced, or if there is no current row with that value the * row is added * If any views are open, the view is updated as well. * The properties do not have to be in the same order as the * columns in the current table */
/* HrDeleteRows()
* Delete a row in the table. * ulFlags * TAD_ALL_ROWS - Causes all rows in the table to be deleted * lpSRowSet is ignored in this case. * lpSRowSet * Each row in the row set contains all the properties for one row * in the table. One of the properties must be the index column. Any * row in the table with the same value for its index column is * deleted. * Each row in LPSRowSet MUST have a unique Index column! * If any views are open, the view is updated as well. * The properties do not have to be in the same order as the * columns in the current table */ #define TAD_ALL_ROWS 1
/* HrDeleteRow()
* Delete a row in the table. * lpSPropValue * This property value specifies the row which has this value * for its index column */
/* HrQueryRow()
* Returns the values of a specified row in the table * lpSPropValue * This property value specifies the row which has this value * for its index column * lppSRow * Address of where to return a pointer to an SRow * lpuliRow * Address of where to return the row number. This can be NULL * if the row number is not required. * */
/* HrEnumRow()
* Returns the values of a specific (numbered) row in the table * ulRowNumber * Indicates row number 0 to n-1 * lppSRow * Address of where to return a pointer to a SRow */
/* HrInsertRow()
* Inserts a row into the table. * uliRow * The row number before which this row will be inserted into the table. * Row numbers can be from 0 to n where o to n-1 result in row insertion * a row number of n results in the row being appended to the table. * lpSRow * This row contains all the properties for one row in the table. * One of the properties must be the index column. Any row in * the table with the same value for its index column is * replaced, or if there is no current row with that value the * row is added * If any views are open, the view is updated as well. * The properties do not have to be in the same order as the * columns in the current table */
/* IMAPIProp in memory */
/* IPropData Interface ---------------------------------------------------- */
#define MAPI_IPROPDATA_METHODS(IPURE) \
MAPIMETHOD(HrSetObjAccess) \ (THIS_ ULONG ulAccess) IPURE; \ MAPIMETHOD(HrSetPropAccess) \ (THIS_ LPSPropTagArray lpPropTagArray, \ ULONG FAR * rgulAccess) IPURE; \ MAPIMETHOD(HrGetPropAccess) \ (THIS_ LPSPropTagArray FAR * lppPropTagArray, \ ULONG FAR * FAR * lprgulAccess) IPURE; \ MAPIMETHOD(HrAddObjProps) \ (THIS_ LPSPropTagArray lppPropTagArray, \ LPSPropProblemArray FAR * lprgulAccess) IPURE;
#undef INTERFACE
#define INTERFACE IPropData
DECLARE_MAPI_INTERFACE_(IPropData, IMAPIProp) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) MAPI_IMAPIPROP_METHODS(PURE) MAPI_IPROPDATA_METHODS(PURE) };
DECLARE_MAPI_INTERFACE_PTR(IPropData, LPPROPDATA);
/* Entry Point for in memory IMAPIProp */
/* CreateIProp()
* Creates the internal memory structures and object handle * to bring a new property interface into existance. * * lpInterface * Interface ID of the TableData object (IID_IMAPIPropData) * * lpAllocateBuffer, lpAllocateMore, and lpFreeBuffer * Function addresses are provided by the caller so that * this DLL allocates/frees memory appropriately. * lppPropData * Address of the pointer which will receive the IPropData object * lpvReserved * Reserved. Should be NULL. */
// If MAPI isn't included, use WABCreateIProp instead
#ifndef CreateIProp
STDAPI_(SCODE) CreateIProp( LPCIID lpInterface, ALLOCATEBUFFER FAR * lpAllocateBuffer, ALLOCATEMORE FAR * lpAllocateMore, FREEBUFFER FAR * lpFreeBuffer, LPVOID lpvReserved, LPPROPDATA FAR * lppPropData ); #endif
STDAPI_(SCODE) WABCreateIProp( LPCIID lpInterface, ALLOCATEBUFFER FAR * lpAllocateBuffer, ALLOCATEMORE FAR * lpAllocateMore, FREEBUFFER FAR * lpFreeBuffer, LPVOID lpvReserved, LPPROPDATA FAR * lppPropData );
/*
* Defines for prop/obj access */ #define IPROP_READONLY ((ULONG) 0x00000001)
#define IPROP_READWRITE ((ULONG) 0x00000002)
#define IPROP_CLEAN ((ULONG) 0x00010000)
#define IPROP_DIRTY ((ULONG) 0x00020000)
/*
- HrSetPropAccess - * Sets access right attributes on a per-property basis. By default, * all properties are read/write. * */
/*
- HrSetObjAccess - * Sets access rights for the object itself. By default, the object has * read/write access. * */
#ifndef NOIDLEENGINE
/* Idle time scheduler */
/*
* PRI * * Priority of an idle task. * The idle engine sorts tasks by priority, and the one with the higher * value runs first. Within a priority level, the functions are called * round-robin. */
#define PRILOWEST -32768
#define PRIHIGHEST 32767
#define PRIUSER 0
/*
* IRO * * Idle routine options. This is a combined bit mask consisting of * individual firo's. Listed below are the possible bit flags. * * FIROWAIT and FIROINTERVAL are mutually exclusive. * If neither of the flags are specified, the default action * is to ignore the time parameter of the idle function and * call it as often as possible if firoPerBlock is not set; * otherwise call it one time only during the idle block * once the time constraint has been set. FIROINTERVAL * is also incompatible with FIROPERBLOCK. * * FIROWAIT - time given is minimum idle time before calling * for the first time in the block of idle time, * afterwhich call as often as possible. * FIROINTERVAL - time given is minimum interval between each * successive call * FIROPERBLOCK - called only once per contiguous block of idle * time * FIRODISABLED - initially disabled when registered, the * default is to enable the function when registered. * FIROONCEONLY - called only one time by the scheduler and then * deregistered automatically. */
#define IRONULL ((USHORT) 0x0000)
#define FIROWAIT ((USHORT) 0x0001)
#define FIROINTERVAL ((USHORT) 0x0002)
#define FIROPERBLOCK ((USHORT) 0x0004)
#define FIRODISABLED ((USHORT) 0x0020)
#define FIROONCEONLY ((USHORT) 0x0040)
/*
* IRC * * Idle routine change options. This is a combined bit mask consisting * of individual firc's; each one identifies an aspect of the idle task * that can be changed. * */
#define IRCNULL ((USHORT) 0x0000)
#define FIRCPFN ((USHORT) 0x0001) /* change function pointer */
#define FIRCPV ((USHORT) 0x0002) /* change parameter block */
#define FIRCPRI ((USHORT) 0x0004) /* change priority */
#define FIRCCSEC ((USHORT) 0x0008) /* change time */
#define FIRCIRO ((USHORT) 0x0010) /* change routine options */
/*
* Type definition for idle functions. An idle function takes one * parameter, an PV, and returns a BOOL value. */
typedef BOOL (STDAPICALLTYPE FNIDLE) (LPVOID); typedef FNIDLE FAR *PFNIDLE;
/*
* FTG * * Function Tag. Used to identify a registered idle function. * */
typedef void FAR *FTG; typedef FTG FAR *PFTG; #define FTGNULL ((FTG) NULL)
/*
- MAPIInitIdle/MAPIDeinitIdle - * Purpose: * Initialises the idle engine * If the initialisation succeded, returns 0, else returns -1 * * Arguments: * lpvReserved Reserved, must be NULL. */
STDAPI_(LONG) MAPIInitIdle (LPVOID lpvReserved);
STDAPI_(VOID) MAPIDeinitIdle (VOID);
/*
* FtgRegisterIdleRoutine * * Registers the function pfn of type PFNIDLE, i.e., (BOOL (*)(LPVOID)) * as an idle function. * * The idle function will be called with the parameter pv by the * idle engine. The function has initial priority priIdle, * associated time csecIdle, and options iroIdle. */
STDAPI_(FTG) FtgRegisterIdleRoutine (PFNIDLE lpfnIdle, LPVOID lpvIdleParam, short priIdle, ULONG csecIdle, USHORT iroIdle);
/*
* DeregisterIdleRoutine * * Removes the given routine from the list of idle routines. * The routine will not be called again. It is the responsibility * of the caller to clean up any data structures pointed to by the * pvIdleParam parameter; this routine does not free the block. */
STDAPI_(void) DeregisterIdleRoutine (FTG ftg);
/*
* EnableIdleRoutine * * Enables or disables an idle routine. */
STDAPI_(void) EnableIdleRoutine (FTG ftg, BOOL fEnable);
/*
* ChangeIdleRoutine * * Changes some or all of the characteristics of the given idle * function. The changes to make are indicated with flags in the * ircIdle parameter. */
STDAPI_(void) ChangeIdleRoutine (FTG ftg, PFNIDLE lpfnIdle, LPVOID lpvIdleParam, short priIdle, ULONG csecIdle, USHORT iroIdle, USHORT ircIdle);
#endif /* ! NOIDLEENGINE */
/* IMalloc Utilities */
STDAPI_(LPMALLOC) MAPIGetDefaultMalloc(VOID);
/* StreamOnFile (SOF) */
/*
* Methods and #define's for implementing an OLE 2.0 storage stream * (as defined in the OLE 2.0 specs) on top of a system file. */
#define SOF_UNIQUEFILENAME ((ULONG) 0x80000000)
STDMETHODIMP OpenStreamOnFile( LPALLOCATEBUFFER lpAllocateBuffer, LPFREEBUFFER lpFreeBuffer, ULONG ulFlags, LPTSTR lpszFileName, LPTSTR lpszPrefix, LPSTREAM FAR * lppStream);
typedef HRESULT (STDMETHODCALLTYPE FAR * LPOPENSTREAMONFILE) ( LPALLOCATEBUFFER lpAllocateBuffer, LPFREEBUFFER lpFreeBuffer, ULONG ulFlags, LPTSTR lpszFileName, LPTSTR lpszPrefix, LPSTREAM FAR * lppStream);
#ifdef _WIN32
#define OPENSTREAMONFILE "OpenStreamOnFile"
#endif
#ifdef WIN16
#define OPENSTREAMONFILE "_OPENSTREAMONFILE"
#endif
/* Property interface utilities */
/*
* Copies a single SPropValue from Src to Dest. Handles all the various * types of properties and will link its allocations given the master * allocation object and an allocate more function. */ STDAPI_(SCODE) PropCopyMore( LPSPropValue lpSPropValueDest, LPSPropValue lpSPropValueSrc, ALLOCATEMORE * lpfAllocMore, LPVOID lpvObject );
/*
* Returns the size in bytes of structure at lpSPropValue, including the * Value. */ STDAPI_(ULONG) UlPropSize( LPSPropValue lpSPropValue );
STDAPI_(BOOL) FEqualNames( LPMAPINAMEID lpName1, LPMAPINAMEID lpName2 );
#if defined(_WIN32) && !defined(_WINNT) && !defined(_WIN95) && !defined(_MAC)
#define _WINNT
#endif
STDAPI_(void) GetInstance(LPSPropValue lpPropMv, LPSPropValue lpPropSv, ULONG uliInst);
extern unsigned char rgchCsds[]; extern unsigned char rgchCids[]; extern unsigned char rgchCsdi[]; extern unsigned char rgchCidi[];
STDAPI_(BOOL) FPropContainsProp( LPSPropValue lpSPropValueDst, LPSPropValue lpSPropValueSrc, ULONG ulFuzzyLevel );
STDAPI_(BOOL) FPropCompareProp( LPSPropValue lpSPropValue1, ULONG ulRelOp, LPSPropValue lpSPropValue2 );
STDAPI_(LONG) LPropCompareProp( LPSPropValue lpSPropValueA, LPSPropValue lpSPropValueB );
STDAPI_(HRESULT) HrAddColumns( LPMAPITABLE lptbl, LPSPropTagArray lpproptagColumnsNew, LPALLOCATEBUFFER lpAllocateBuffer, LPFREEBUFFER lpFreeBuffer);
STDAPI_(HRESULT) HrAddColumnsEx( LPMAPITABLE lptbl, LPSPropTagArray lpproptagColumnsNew, LPALLOCATEBUFFER lpAllocateBuffer, LPFREEBUFFER lpFreeBuffer, void (FAR *lpfnFilterColumns)(LPSPropTagArray ptaga));
/* Notification utilities */
/*
* Function that creates an advise sink object given a notification * callback function and context. */
STDAPI HrAllocAdviseSink( LPNOTIFCALLBACK lpfnCallback, LPVOID lpvContext, LPMAPIADVISESINK FAR *lppAdviseSink );
/*
* Wraps an existing advise sink with another one which guarantees * that the original advise sink will be called in the thread on * which it was created. */
STDAPI HrThisThreadAdviseSink( LPMAPIADVISESINK lpAdviseSink, LPMAPIADVISESINK FAR *lppAdviseSink);
/*
* Allows a client and/or provider to force notifications * which are currently queued in the MAPI notification engine * to be dispatched without doing a message dispatch. */
STDAPI HrDispatchNotifications (ULONG ulFlags);
/* Service Provider Utilities */
/*
* Structures and utility function for building a display table * from resources. */
typedef struct { ULONG ulCtlType; /* DTCT_LABEL, etc. */ ULONG ulCtlFlags; /* DT_REQUIRED, etc. */ LPBYTE lpbNotif; /* pointer to notification data */ ULONG cbNotif; /* count of bytes of notification data */ LPTSTR lpszFilter; /* character filter for edit/combobox */ ULONG ulItemID; /* to validate parallel dlg template entry */ union { /* ulCtlType discriminates */ LPVOID lpv; /* Initialize this to avoid warnings */ LPDTBLLABEL lplabel; LPDTBLEDIT lpedit; LPDTBLLBX lplbx; LPDTBLCOMBOBOX lpcombobox; LPDTBLDDLBX lpddlbx; LPDTBLCHECKBOX lpcheckbox; LPDTBLGROUPBOX lpgroupbox; LPDTBLBUTTON lpbutton; LPDTBLRADIOBUTTON lpradiobutton; LPDTBLMVLISTBOX lpmvlbx; LPDTBLMVDDLBX lpmvddlbx; LPDTBLPAGE lppage; } ctl; } DTCTL, FAR *LPDTCTL;
typedef struct { ULONG cctl; LPTSTR lpszResourceName; /* as usual, may be an integer ID */ union { /* as usual, may be an integer ID */ LPTSTR lpszComponent; ULONG ulItemID; }; LPDTCTL lpctl; } DTPAGE, FAR *LPDTPAGE;
STDAPI BuildDisplayTable( LPALLOCATEBUFFER lpAllocateBuffer, LPALLOCATEMORE lpAllocateMore, LPFREEBUFFER lpFreeBuffer, LPMALLOC lpMalloc, HINSTANCE hInstance, UINT cPages, LPDTPAGE lpPage, ULONG ulFlags, LPMAPITABLE * lppTable, LPTABLEDATA * lppTblData );
/* MAPI structure validation/copy utilities */
/*
* Validate, copy, and adjust pointers in MAPI structures: * notification * property value array * option data */
STDAPI_(SCODE) ScCountNotifications(int cNotifications, LPNOTIFICATION lpNotifications, ULONG FAR *lpcb);
STDAPI_(SCODE) ScCopyNotifications(int cNotification, LPNOTIFICATION lpNotifications, LPVOID lpvDst, ULONG FAR *lpcb);
STDAPI_(SCODE) ScRelocNotifications(int cNotification, LPNOTIFICATION lpNotifications, LPVOID lpvBaseOld, LPVOID lpvBaseNew, ULONG FAR *lpcb);
STDAPI_(SCODE) ScCountProps(int cValues, LPSPropValue lpPropArray, ULONG FAR *lpcb);
STDAPI_(LPSPropValue) LpValFindProp(ULONG ulPropTag, ULONG cValues, LPSPropValue lpPropArray);
STDAPI_(SCODE) ScCopyProps(int cValues, LPSPropValue lpPropArray, LPVOID lpvDst, ULONG FAR *lpcb);
STDAPI_(SCODE) ScRelocProps(int cValues, LPSPropValue lpPropArray, LPVOID lpvBaseOld, LPVOID lpvBaseNew, ULONG FAR *lpcb);
STDAPI_(SCODE) ScDupPropset(int cValues, LPSPropValue lpPropArray, LPALLOCATEBUFFER lpAllocateBuffer, LPSPropValue FAR *lppPropArray);
/* General utility functions */
/* Related to the OLE Component object model */
STDAPI_(ULONG) UlAddRef(LPVOID lpunk); STDAPI_(ULONG) UlRelease(LPVOID lpunk);
/* Related to the MAPI interface */
STDAPI HrGetOneProp(LPMAPIPROP lpMapiProp, ULONG ulPropTag, LPSPropValue FAR *lppProp); STDAPI HrSetOneProp(LPMAPIPROP lpMapiProp, LPSPropValue lpProp); STDAPI_(BOOL) FPropExists(LPMAPIPROP lpMapiProp, ULONG ulPropTag); STDAPI_(LPSPropValue) PpropFindProp(LPSPropValue lpPropArray, ULONG cValues, ULONG ulPropTag); STDAPI_(void) FreePadrlist(LPADRLIST lpAdrlist); STDAPI_(void) FreeProws(LPSRowSet lpRows); STDAPI HrQueryAllRows(LPMAPITABLE lpTable, LPSPropTagArray lpPropTags, LPSRestriction lpRestriction, LPSSortOrderSet lpSortOrderSet, LONG crowsMax, LPSRowSet FAR *lppRows);
/* C runtime substitutes */
STDAPI_(LPTSTR) SzFindCh(LPCTSTR lpsz, USHORT ch); /* strchr */ STDAPI_(LPTSTR) SzFindLastCh(LPCTSTR lpsz, USHORT ch); /* strrchr */ STDAPI_(LPTSTR) SzFindSz(LPCTSTR lpsz, LPCTSTR lpszKey); /*strstr */ STDAPI_(unsigned int) UFromSz(LPCTSTR lpsz); /* atoi */
STDAPI_(SCODE) ScUNCFromLocalPath(LPSTR lpszLocal, LPSTR lpszUNC, UINT cchUNC); STDAPI_(SCODE) ScLocalPathFromUNC(LPSTR lpszUNC, LPSTR lpszLocal, UINT cchLocal);
/* 64-bit arithmetic with times */
STDAPI_(FILETIME) FtAddFt(FILETIME ftAddend1, FILETIME ftAddend2); STDAPI_(FILETIME) FtMulDwDw(DWORD ftMultiplicand, DWORD ftMultiplier); STDAPI_(FILETIME) FtMulDw(DWORD ftMultiplier, FILETIME ftMultiplicand); STDAPI_(FILETIME) FtSubFt(FILETIME ftMinuend, FILETIME ftSubtrahend); STDAPI_(FILETIME) FtNegFt(FILETIME ft);
/* Message composition */
STDAPI_(SCODE) ScCreateConversationIndex (ULONG cbParent, LPBYTE lpbParent, ULONG FAR * lpcbConvIndex, LPBYTE FAR * lppbConvIndex);
/* Store support */
STDAPI WrapStoreEntryID (ULONG ulFlags, LPTSTR lpszDLLName, ULONG cbOrigEntry, LPENTRYID lpOrigEntry, ULONG *lpcbWrappedEntry, LPENTRYID *lppWrappedEntry);
/* RTF Sync Utilities */
#define RTF_SYNC_RTF_CHANGED ((ULONG) 0x00000001)
#define RTF_SYNC_BODY_CHANGED ((ULONG) 0x00000002)
STDAPI_(HRESULT) RTFSync (LPMESSAGE lpMessage, ULONG ulFlags, BOOL FAR * lpfMessageUpdated);
/* Flags for WrapCompressedRTFStream() */
/****** MAPI_MODIFY ((ULONG) 0x00000001) mapidefs.h */ /****** STORE_UNCOMPRESSED_RTF ((ULONG) 0x00008000) mapidefs.h */
STDAPI_(HRESULT) WrapCompressedRTFStream (LPSTREAM lpCompressedRTFStream, ULONG ulFlags, LPSTREAM FAR * lpUncompressedRTFStream);
/* Storage on Stream */
#if defined(_WIN32) || defined(WIN16)
STDAPI_(HRESULT) HrIStorageFromStream (LPUNKNOWN lpUnkIn, LPCIID lpInterface, ULONG ulFlags, LPSTORAGE FAR * lppStorageOut); #endif
/*
* Setup and cleanup. * * Providers never need to make these calls. * * Test applications and the like which do not call MAPIInitialize * may want to call them, so that the few utility functions which * need MAPI allocators (and do not ask for them explicitly) * will work. */
/* All flags are reserved for ScInitMapiUtil. */
STDAPI_(SCODE) ScInitMapiUtil(ULONG ulFlags); STDAPI_(VOID) DeinitMapiUtil(VOID);
/*
* Entry point names. * * These are for new entry points defined since MAPI first shipped * in Windows 95. Using these names in a GetProcAddress call makes * it easier to write code which uses them optionally. */
#if defined (WIN16)
#define szHrDispatchNotifications "HrDispatchNotifications"
#elif defined (_WIN32) && defined (_X86_)
#define szHrDispatchNotifications "_HrDispatchNotifications@4"
#elif defined (_ALPHA_) || defined (_MIPS_) || defined (_PPC_)
#define szHrDispatchNotifications "HrDispatchNotifications"
#endif
typedef HRESULT (STDAPICALLTYPE DISPATCHNOTIFICATIONS)(ULONG ulFlags); typedef DISPATCHNOTIFICATIONS FAR * LPDISPATCHNOTIFICATIONS;
#if defined (WIN16)
#define szScCreateConversationIndex "ScCreateConversationIndex"
#elif defined (_WIN32) && defined (_X86_)
#define szScCreateConversationIndex "_ScCreateConversationIndex@16"
#elif defined (_ALPHA_) || defined (_MIPS_) || defined (_PPC_)
#define szScCreateConversationIndex "ScCreateConversationIndex"
#endif
typedef SCODE (STDAPICALLTYPE CREATECONVERSATIONINDEX)(ULONG cbParent, LPBYTE lpbParent, ULONG FAR *lpcbConvIndex, LPBYTE FAR *lppbConvIndex); typedef CREATECONVERSATIONINDEX FAR *LPCREATECONVERSATIONINDEX;
#ifdef __cplusplus
} #endif
#endif /* _WABUTIL_H_ */
|