XTPCalendarMAPIWrapper.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:14k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarMAPIWrapper.h: interface for the CXTPCalendarMAPIWrapper class.
  2. //
  3. // This file is a part of the XTREME CALENDAR MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPCALENDARMAPIWRAPPER_H__)
  22. #define __XTPCALENDARMAPIWRAPPER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "Calendar/mapi/mapidefs.h"
  28. #include "Calendar/mapi/mapicode.h"
  29. #include "Calendar/mapi/mapiguid.h"
  30. #include "Calendar/mapi/mapitags.h"
  31. #include "Calendar/mapi/mapix.h"
  32. //{{AFX_CODEJOCK_PRIVATE
  33. #define TYPEDEF_WRAPPER_POINTER(val, type, proc)
  34. const int xtpWrapper##proc = val;
  35. const LPCSTR xtpWrapperProc##proc = #proc;
  36. typedef type (__stdcall* PFN##proc)
  37. #define TYPEDEF_WRAPPER_PTR_NUM(val, type, proc, num)
  38. const int xtpWrapper##proc = val;
  39. const LPCSTR xtpWrapperProc##proc = #proc"@"#num;
  40. typedef type (__stdcall* PFN##proc)
  41. TYPEDEF_WRAPPER_POINTER(0, HRESULT, MAPIInitialize)(LPVOID);
  42. TYPEDEF_WRAPPER_POINTER(1, void, MAPIUninitialize)();
  43. TYPEDEF_WRAPPER_POINTER(2, HRESULT, MAPILogonEx)(ULONG, LPTSTR, LPTSTR, FLAGS, LPMAPISESSION FAR *);
  44. TYPEDEF_WRAPPER_POINTER(3, ULONG, MAPIFreeBuffer)(LPVOID);
  45. TYPEDEF_WRAPPER_PTR_NUM(4, ULONG, UlRelease, 4)(LPVOID);
  46. TYPEDEF_WRAPPER_PTR_NUM(5, void, FreeProws, 4)(LPSRowSet);
  47. TYPEDEF_WRAPPER_PTR_NUM(6, HRESULT, HrQueryAllRows, 24)(LPMAPITABLE, LPSPropTagArray, LPSRestriction, LPSSortOrderSet, LONG, LPSRowSet FAR *);
  48. TYPEDEF_WRAPPER_PTR_NUM(7, HRESULT, HrGetOneProp, 12)(LPMAPIPROP, ULONG, LPSPropValue FAR *);
  49. TYPEDEF_WRAPPER_PTR_NUM(8, HRESULT, HrSetOneProp, 8)(LPMAPIPROP, LPSPropValue);
  50. TYPEDEF_WRAPPER_POINTER(9, SCODE, MAPIAllocateBuffer)(ULONG, LPVOID FAR *);
  51. TYPEDEF_WRAPPER_PTR_NUM(10, HRESULT, HrThisThreadAdviseSink, 8)(LPMAPIADVISESINK, LPMAPIADVISESINK FAR *);
  52. TYPEDEF_WRAPPER_PTR_NUM(11, HRESULT, HrAllocAdviseSink, 12)(LPNOTIFCALLBACK, LPVOID, LPMAPIADVISESINK FAR *);
  53. //}}AFX_CODEJOCK_PRIVATE
  54. //===========================================================================
  55. // Summary:
  56. //     The CXTPCalendarMAPIWrapper class wraps the mapi32.dll API.
  57. //===========================================================================
  58. class _XTP_EXT_CLASS CXTPCalendarMAPIWrapper
  59. {
  60. public:
  61. //-----------------------------------------------------------------------
  62. // Summary:
  63. //     Constructs a CXTPCalendarMAPIWrapper object.
  64. //-----------------------------------------------------------------------
  65. CXTPCalendarMAPIWrapper();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Destroys a CXTPCalendarMAPIWrapper object, handles cleanup and
  69. //     deallocation.
  70. //-----------------------------------------------------------------------
  71. virtual ~CXTPCalendarMAPIWrapper();
  72. /////////////////////////////////////////////////////////////////////////
  73. // Wrapped methods
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     Increments the MAPI subsystem reference count and initializes
  77. //     global data for the MAPI DLL.
  78. // Parameters:
  79. //     lpMapiInit - [in] Pointer to a MAPIINIT_0 structure.
  80. //                  The lpMapiInit parameter can be set to NULL.
  81. // Returns:
  82. //     Returns S_OK if MAPI subsystem was initialized successfully,
  83. //     or an error value otherwise.
  84. //-----------------------------------------------------------------------
  85. HRESULT MAPIInitialize(LPVOID lpMapiInit);
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Decrements the reference count, cleans up, and deletes
  89. //     per-instance global data for the MAPI DLL.
  90. //-----------------------------------------------------------------------
  91. void MAPIUninitialize();
  92. //-----------------------------------------------------------------------
  93. // Summary:
  94. //     Logs a client application on to a session with the messaging system..
  95. // Parameters:
  96. //     ulUIParam       - [in] Handle to the window to which the logon dialog box is modal.
  97. //                       If no dialog box is displayed during the call,
  98. //                       the ulUIParam parameter is ignored. This parameter can be zero..
  99. //     lpszProfileName - [in] Pointer to a string containing the name of the profile to use
  100. //                       when logging on. This string is limited to 64 characters.
  101. //     lpszPassword    - [in] Pointer to a string containing the password of the profile.
  102. //                       The lpszPassword parameter can be NULL whether or not the
  103. //                       lpszProfileName parameter is NULL. This string is limited to 64 characters. .
  104. //     flFlags         - [in] Bitmask of flags used to control how logon is performed.
  105. //                       See API MAPILogonEx description for more info.
  106. //     lppSession      - [out] Pointer to a pointer to the MAPI session interface.
  107. // Returns:
  108. //     S_OK                - The logon succeeded.
  109. //     MAPI_E_LOGON_FAILED - The logon did not succeed, either because one or more of the
  110. //                           parameters to MAPILogonEx were invalid or because there were
  111. //                           too many sessions open already.
  112. //     MAPI_E_TIMEOUT      - MAPI serializes all logons through a mutex. This is returned if
  113. //                           the MAPI_TIMEOUT_SHORT flag was set and another thread held the mutex.
  114. //     MAPI_E_USER_CANCEL  - The user canceled the operation, typically by clicking
  115. //                           the Cancel button in a dialog box.
  116. //-----------------------------------------------------------------------
  117. HRESULT MAPILogonEx(ULONG ulUIParam, LPTSTR lpszProfileName, LPTSTR lpszPassword, FLAGS flFlags, LPMAPISESSION FAR * lppSession);
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     Frees a memory buffer allocated with a call to the MAPIAllocateBuffer
  121. //     function or the MAPIAllocateMore function.
  122. // Parameters:
  123. //     lpBuffer - [in] Pointer to a previously allocated memory buffer.
  124. //                If NULL is passed in the lpBuffer parameter, MAPIFreeBuffer does nothing. .
  125. // Returns:
  126. //     Returns S_OK if the call succeeded and freed the memory requested.
  127. //     MAPIFreeBuffer can also return S_OK on already freed locations or
  128. //     if memory block is not allocated with MAPIAllocateBuffer and MAPIAllocateMore.
  129. //-----------------------------------------------------------------------
  130. ULONG MAPIFreeBuffer(LPVOID lpBuffer);
  131. //-----------------------------------------------------------------------
  132. // Summary:
  133. //     Provides an alternative way to invoke the OLE method IUnknown::Release. .
  134. // Parameters:
  135. //     punk - [in] Pointer to an interface derived from the IUnknown interface,
  136. //            in other words any MAPI interface.
  137. // Returns:
  138. //     Returns S_OK if the call succeeded and has returned the expected value or values.
  139. //     MAPI_E_CALL_FAILED - An error of unexpected or unknown origin
  140. //                          prevented the operation from completing.
  141. //-----------------------------------------------------------------------
  142. ULONG UlRelease(LPVOID punk);
  143. //-----------------------------------------------------------------------
  144. // Summary:
  145. //     Destroys an SRowSet structure and frees associated memory, including
  146. //     memory allocated for all member arrays and structures.
  147. // Parameters:
  148. //     prows - [in] Pointer to the SRowSet structure to be destroyed.
  149. //-----------------------------------------------------------------------
  150. void FreeProws(LPSRowSet prows);
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Retrieves all rows of a table.
  154. // Parameters:
  155. //     ptable - [in] Pointer to the MAPI table from which rows are retrieved.
  156. //     ptaga  - [in] Pointer to an SPropTagArray structure containing an array of property tags
  157. //              indicating table columns. These tags are used to select the specific columns
  158. //              to be retrieved. If the ptaga parameter is NULL, HrQueryAllRows retrieves the
  159. //              entire column set of the current table view passed in the ptable parameter.
  160. //     pres   - [in] Pointer to an SRestriction structure containing retrieval restrictions.
  161. //              If the pres parameter is NULL, HrQueryAllRows makes no restrictions.
  162. //     psos   - [in] Pointer to an SSortOrderSet structure identifying the sort order of the
  163. //              columns to be retrieved. If the psos parameter is NULL,
  164. //              the default sort order for the table is used.
  165. //     crowsMax-[in] Maximum number of rows to be retrieved. If the value of the crowsMax
  166. //              parameter is zero, no limit on the number of rows retrieved is set.
  167. //     pprows - [out] Pointer to a pointer to the returned SRowSet structure containing
  168. //              an array of pointers to the retrieved table rows.
  169. // Returns:
  170. //     Returns S_OK if the call succeeded and retrieved the expected rows of a table.
  171. //     MAPI_E_TABLE_TOO_BIG - The number of rows in the table is larger than
  172. //                            the number passed for the crowsMax parameter.
  173. //-----------------------------------------------------------------------
  174. HRESULT HrQueryAllRows(LPMAPITABLE ptable, LPSPropTagArray ptaga, LPSRestriction pres, LPSSortOrderSet psos, LONG crowsMax, LPSRowSet FAR * pprows);
  175. //-----------------------------------------------------------------------
  176. // Summary:
  177. //     Retrieves the value of a single property from a property interface,
  178. //     that is, an interface derived from IMAPIProp.
  179. // Parameters:
  180. //     pmp       - [in] Pointer to the IMAPIProp interface from which
  181. //                 the property value is to be retrieved.
  182. //     ulPropTag - [in] Property tag of the property to be retrieved.
  183. //     ppprop    - [out] Pointer to a pointer to the returned SPropValue
  184. //                 structure defining the retrieved property value.
  185. // Returns:
  186. //     MAPI_E_NOT_FOUND - The requested property is not available from
  187. //                        the specified interface.
  188. //-----------------------------------------------------------------------
  189. HRESULT HrGetOneProp(LPMAPIPROP pmp, ULONG ulPropTag, LPSPropValue FAR * ppprop);
  190. //-----------------------------------------------------------------------
  191. // Summary:
  192. //     Sets or changes the value of a single property on a property
  193. //     interface, that is, an interface derived from IMAPIProp.
  194. // Parameters:
  195. //     pmp   - [in] Pointer to an IMAPIProp interface on which the
  196. //             property value is to be set or changed.
  197. //     pprop - [in] Pointer to the SPropValue structure defining the
  198. //             property to be set or changed.
  199. // Returns:
  200. //     MAPI_E_NOT_FOUND - The requested property is not available from
  201. //                        the specified interface.
  202. //-----------------------------------------------------------------------
  203. HRESULT HrSetOneProp(LPMAPIPROP pmp, LPSPropValue pprop);
  204. //-----------------------------------------------------------------------
  205. // Summary:
  206. //     Allocates a memory buffer.
  207. // Parameters:
  208. //     cbSize    - [in] Size, in bytes, of the buffer to be allocated.
  209. //     lppBuffer - [out] Pointer to the returned allocated buffer.
  210. // Returns:
  211. //     Returns S_OK if the call succeeded and has returned
  212. //     the expected value or values.
  213. //-----------------------------------------------------------------------
  214. SCODE MAPIAllocateBuffer(ULONG cbSize, LPVOID FAR * lppBuffer);
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     Creates an advise sink that wraps an existing advise sink for
  218. //     thread safety.
  219. // Parameters:
  220. //     lpAdviseSink  - [in] Pointer to the advise sink to be wrapped.
  221. //     lppAdviseSink - [out] Pointer to a pointer to a new advise sink
  222. //                     that wraps the advise sink pointed to by the
  223. //                     lpAdviseSink parameter.
  224. //-----------------------------------------------------------------------
  225. HRESULT HrThisThreadAdviseSink(LPMAPIADVISESINK lpAdviseSink, LPMAPIADVISESINK FAR * lppAdviseSink);
  226. //-----------------------------------------------------------------------
  227. // Summary:
  228. //     Creates an advise sink object, given a context specified by the
  229. //     calling implementation and a callback function to be triggered by
  230. //     an event notification..
  231. // Parameters:
  232. //     lpfnCallback  - [in] Pointer to a callback function based on the
  233. //                     NOTIFCALLBACK prototype that MAPI is to call when
  234. //                     a notification event occurs for the newly created
  235. //                     advise sink. .
  236. //     lpvContext    - [in] Pointer to caller data passed to the callback
  237. //                     function when MAPI calls it. The caller data can
  238. //                     represent an address of significance to the client
  239. //                     or provider. Typically, for C++ code, the lpvContext
  240. //                     parameter represents a pointer to the address of
  241. //                     an object.
  242. //     lppAdviseSink - [out] Pointer to a pointer to an advise sink object.
  243. //-----------------------------------------------------------------------
  244. HRESULT HrAllocAdviseSink(LPNOTIFCALLBACK lpfnCallback, LPVOID lpvContext, LPMAPIADVISESINK FAR * lppAdviseSink);
  245. private:
  246. LPVOID m_ptrWrappers[12];   // Wrapper pointer
  247. HMODULE m_hMapiDll;         // Handle to the mapi32 dll.
  248. };
  249. /////////////////////////////////////////////////////////////////////////////
  250. #endif // !defined(__XTPCALENDARMAPIWRAPPER_H__)