// XTPCalendarMAPIWrapper.h: interface for the CXTPCalendarMAPIWrapper class. // // This file is a part of the XTREME CALENDAR MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(__XTPCALENDARMAPIWRAPPER_H__) #define __XTPCALENDARMAPIWRAPPER_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Calendar/mapi/mapidefs.h" #include "Calendar/mapi/mapicode.h" #include "Calendar/mapi/mapiguid.h" #include "Calendar/mapi/mapitags.h" #include "Calendar/mapi/mapix.h" //{{AFX_CODEJOCK_PRIVATE #define TYPEDEF_WRAPPER_POINTER(val, type, proc)\ const int xtpWrapper##proc = val;\ const LPCSTR xtpWrapperProc##proc = #proc;\ typedef type (__stdcall* PFN##proc) #define TYPEDEF_WRAPPER_PTR_NUM(val, type, proc, num)\ const int xtpWrapper##proc = val;\ const LPCSTR xtpWrapperProc##proc = #proc"@"#num;\ typedef type (__stdcall* PFN##proc) TYPEDEF_WRAPPER_POINTER(0, HRESULT, MAPIInitialize)(LPVOID); TYPEDEF_WRAPPER_POINTER(1, void, MAPIUninitialize)(); TYPEDEF_WRAPPER_POINTER(2, HRESULT, MAPILogonEx)(ULONG, LPTSTR, LPTSTR, FLAGS, LPMAPISESSION FAR *); TYPEDEF_WRAPPER_POINTER(3, ULONG, MAPIFreeBuffer)(LPVOID); TYPEDEF_WRAPPER_PTR_NUM(4, ULONG, UlRelease, 4)(LPVOID); TYPEDEF_WRAPPER_PTR_NUM(5, void, FreeProws, 4)(LPSRowSet); TYPEDEF_WRAPPER_PTR_NUM(6, HRESULT, HrQueryAllRows, 24)(LPMAPITABLE, LPSPropTagArray, LPSRestriction, LPSSortOrderSet, LONG, LPSRowSet FAR *); TYPEDEF_WRAPPER_PTR_NUM(7, HRESULT, HrGetOneProp, 12)(LPMAPIPROP, ULONG, LPSPropValue FAR *); TYPEDEF_WRAPPER_PTR_NUM(8, HRESULT, HrSetOneProp, 8)(LPMAPIPROP, LPSPropValue); TYPEDEF_WRAPPER_POINTER(9, SCODE, MAPIAllocateBuffer)(ULONG, LPVOID FAR *); TYPEDEF_WRAPPER_PTR_NUM(10, HRESULT, HrThisThreadAdviseSink, 8)(LPMAPIADVISESINK, LPMAPIADVISESINK FAR *); TYPEDEF_WRAPPER_PTR_NUM(11, HRESULT, HrAllocAdviseSink, 12)(LPNOTIFCALLBACK, LPVOID, LPMAPIADVISESINK FAR *); //}}AFX_CODEJOCK_PRIVATE //=========================================================================== // Summary: // The CXTPCalendarMAPIWrapper class wraps the mapi32.dll API. //=========================================================================== class _XTP_EXT_CLASS CXTPCalendarMAPIWrapper { public: //----------------------------------------------------------------------- // Summary: // Constructs a CXTPCalendarMAPIWrapper object. //----------------------------------------------------------------------- CXTPCalendarMAPIWrapper(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPCalendarMAPIWrapper object, handles cleanup and // deallocation. //----------------------------------------------------------------------- virtual ~CXTPCalendarMAPIWrapper(); ///////////////////////////////////////////////////////////////////////// // Wrapped methods //----------------------------------------------------------------------- // Summary: // Increments the MAPI subsystem reference count and initializes // global data for the MAPI DLL. // Parameters: // lpMapiInit - [in] Pointer to a MAPIINIT_0 structure. // The lpMapiInit parameter can be set to NULL. // Returns: // Returns S_OK if MAPI subsystem was initialized successfully, // or an error value otherwise. //----------------------------------------------------------------------- HRESULT MAPIInitialize(LPVOID lpMapiInit); //----------------------------------------------------------------------- // Summary: // Decrements the reference count, cleans up, and deletes // per-instance global data for the MAPI DLL. //----------------------------------------------------------------------- void MAPIUninitialize(); //----------------------------------------------------------------------- // Summary: // Logs a client application on to a session with the messaging system.. // Parameters: // ulUIParam - [in] Handle to the window to which the logon dialog box is modal. // If no dialog box is displayed during the call, // the ulUIParam parameter is ignored. This parameter can be zero.. // lpszProfileName - [in] Pointer to a string containing the name of the profile to use // when logging on. This string is limited to 64 characters. // lpszPassword - [in] Pointer to a string containing the password of the profile. // The lpszPassword parameter can be NULL whether or not the // lpszProfileName parameter is NULL. This string is limited to 64 characters. . // flFlags - [in] Bitmask of flags used to control how logon is performed. // See API MAPILogonEx description for more info. // lppSession - [out] Pointer to a pointer to the MAPI session interface. // Returns: // S_OK - The logon succeeded. // MAPI_E_LOGON_FAILED - The logon did not succeed, either because one or more of the // parameters to MAPILogonEx were invalid or because there were // too many sessions open already. // MAPI_E_TIMEOUT - MAPI serializes all logons through a mutex. This is returned if // the MAPI_TIMEOUT_SHORT flag was set and another thread held the mutex. // MAPI_E_USER_CANCEL - The user canceled the operation, typically by clicking // the Cancel button in a dialog box. //----------------------------------------------------------------------- HRESULT MAPILogonEx(ULONG ulUIParam, LPTSTR lpszProfileName, LPTSTR lpszPassword, FLAGS flFlags, LPMAPISESSION FAR * lppSession); //----------------------------------------------------------------------- // Summary: // Frees a memory buffer allocated with a call to the MAPIAllocateBuffer // function or the MAPIAllocateMore function. // Parameters: // lpBuffer - [in] Pointer to a previously allocated memory buffer. // If NULL is passed in the lpBuffer parameter, MAPIFreeBuffer does nothing. . // Returns: // Returns S_OK if the call succeeded and freed the memory requested. // MAPIFreeBuffer can also return S_OK on already freed locations or // if memory block is not allocated with MAPIAllocateBuffer and MAPIAllocateMore. //----------------------------------------------------------------------- ULONG MAPIFreeBuffer(LPVOID lpBuffer); //----------------------------------------------------------------------- // Summary: // Provides an alternative way to invoke the OLE method IUnknown::Release. . // Parameters: // punk - [in] Pointer to an interface derived from the IUnknown interface, // in other words any MAPI interface. // Returns: // Returns S_OK if the call succeeded and has returned the expected value or values. // MAPI_E_CALL_FAILED - An error of unexpected or unknown origin // prevented the operation from completing. //----------------------------------------------------------------------- ULONG UlRelease(LPVOID punk); //----------------------------------------------------------------------- // Summary: // Destroys an SRowSet structure and frees associated memory, including // memory allocated for all member arrays and structures. // Parameters: // prows - [in] Pointer to the SRowSet structure to be destroyed. //----------------------------------------------------------------------- void FreeProws(LPSRowSet prows); // ----------------------------------------------------------------------- // Summary: // Retrieves all rows of a table. // Parameters: // ptable : [in] Pointer to the MAPI table from which rows are // retrieved. // ptaga : [in] Pointer to an SPropTagArray structure containing // an array of property tags indicating table columns. // These tags are used to select the specific columns to // be retrieved. If the ptaga parameter is NULL, // HrQueryAllRows retrieves the entire column set of the // current table view passed in the ptable parameter. // pres : [in] Pointer to an SRestriction structure containing // retrieval restrictions. If the pres parameter is NULL, // HrQueryAllRows makes no restrictions // psos : [in] Pointer to an SSortOrderSet structure identifying // the sort order of the columns to be retrieved. If the // psos parameter is NULL, the default sort order for the // table is used. // crowsMax : [in] Maximum number of rows to be retrieved. // If the value of the crowsMax parameter is zero, // no limit on the number of rows retrieved is set. // pprows : [out] Pointer to a pointer to the returned SRowSet // structure containing an array of pointers to the // retrieved table rows. // Returns: // \Returns S_OK if the call succeeded and retrieved the expected // rows of a table. MAPI_E_TABLE_TOO_BIG - The number of rows in the // table is larger than the number passed for the crowsMax parameter. // ----------------------------------------------------------------------- HRESULT HrQueryAllRows( LPMAPITABLE ptable, LPSPropTagArray ptaga, LPSRestriction pres, LPSSortOrderSet psos, LONG crowsMax, LPSRowSet FAR * pprows); //----------------------------------------------------------------------- // Summary: // Retrieves the value of a single property from a property interface, // that is, an interface derived from IMAPIProp. // Parameters: // pmp - [in] Pointer to the IMAPIProp interface from which // the property value is to be retrieved. // ulPropTag - [in] Property tag of the property to be retrieved. // ppprop - [out] Pointer to a pointer to the returned SPropValue // structure defining the retrieved property value. // Returns: // MAPI_E_NOT_FOUND - The requested property is not available from // the specified interface. //----------------------------------------------------------------------- HRESULT HrGetOneProp(LPMAPIPROP pmp, ULONG ulPropTag, LPSPropValue FAR * ppprop); //----------------------------------------------------------------------- // Summary: // Sets or changes the value of a single property on a property // interface, that is, an interface derived from IMAPIProp. // Parameters: // pmp - [in] Pointer to an IMAPIProp interface on which the // property value is to be set or changed. // pprop - [in] Pointer to the SPropValue structure defining the // property to be set or changed. // Returns: // MAPI_E_NOT_FOUND - The requested property is not available from // the specified interface. //----------------------------------------------------------------------- HRESULT HrSetOneProp(LPMAPIPROP pmp, LPSPropValue pprop); //----------------------------------------------------------------------- // Summary: // Allocates a memory buffer. // Parameters: // cbSize - [in] Size, in bytes, of the buffer to be allocated. // lppBuffer - [out] Pointer to the returned allocated buffer. // Returns: // Returns S_OK if the call succeeded and has returned // the expected value or values. //----------------------------------------------------------------------- SCODE MAPIAllocateBuffer(ULONG cbSize, LPVOID FAR * lppBuffer); //----------------------------------------------------------------------- // Summary: // Creates an advise sink that wraps an existing advise sink for // thread safety. // Parameters: // lpAdviseSink - [in] Pointer to the advise sink to be wrapped. // lppAdviseSink - [out] Pointer to a pointer to a new advise sink // that wraps the advise sink pointed to by the // lpAdviseSink parameter. // Returns: // Returns S_OK if the call succeeded and has returned // the expected value or values,else E_FAIL //----------------------------------------------------------------------- HRESULT HrThisThreadAdviseSink(LPMAPIADVISESINK lpAdviseSink, LPMAPIADVISESINK FAR * lppAdviseSink); //----------------------------------------------------------------------- // Summary: // Creates an advise sink object, given a context specified by the // calling implementation and a callback function to be triggered by // an event notification.. // Parameters: // lpfnCallback - [in] Pointer to a callback function based on the // NOTIFCALLBACK prototype that MAPI is to call when // a notification event occurs for the newly created // advise sink. . // lpvContext - [in] Pointer to caller data passed to the callback // function when MAPI calls it. The caller data can // represent an address of significance to the client // or provider. Typically, for C++ code, the lpvContext // parameter represents a pointer to the address of // an object. // lppAdviseSink - [out] Pointer to a pointer to an advise sink object. // Returns: // Returns S_OK if the call succeeded and has returned // the expected value or values,else E_FAIL //----------------------------------------------------------------------- HRESULT HrAllocAdviseSink(LPNOTIFCALLBACK lpfnCallback, LPVOID lpvContext, LPMAPIADVISESINK FAR * lppAdviseSink); private: LPVOID m_ptrWrappers[12]; // Wrapper pointer HMODULE m_hMapiDll; // Handle to the mapi32 dll. }; ///////////////////////////////////////////////////////////////////////////// #endif // !defined(__XTPCALENDARMAPIWRAPPER_H__)