You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
14 KiB
C++
296 lines
14 KiB
C++
// 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__)
|