LASTERR.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////
  2. //  LASTERR.H
  3. //
  4. // Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  5. //
  6. //
  7. // last err support object.
  8. //
  9. //There should be no global objects of this class
  10. // because by the time the dectructor of a global CLastError
  11. // is called, MAPIFreeBuffer does not work.
  12. #ifndef __LASTERR_H__
  13. #define __LASTERR_H__
  14. class CLastError
  15. {
  16. public:
  17.     CLastError(LPSTR);
  18.     ~CLastError(void);
  19.     // standard OLE or MAPI errors.
  20.     HRESULT     HrSetLastError(HRESULT hr);
  21.     // our internal extended error codes or a non-standard string for OLE or MAPI errors
  22.     // scFORM is one of the errors defined by MAKE_FORM_X_SCODE macro family
  23.     HRESULT     HrSetLastError(HRESULT hr, SCODE scFORM, ...);
  24.     // errors returned from underlying objects.
  25.     HRESULT     HrSetLastError(HRESULT hr, IUnknown* punk);
  26.     // our implementation of GetLastError
  27.     HRESULT     HrGetLastError(HRESULT hr, DWORD dwFlags,
  28.                                LPMAPIERROR * lppMAPIError);
  29.     
  30.     //displays the last error info
  31.     int         ShowError(HWND);
  32. private:
  33.     // we have three possible error types: our internal errors which
  34.     //  we signify by MAPI_E_EXTENDED to the user, standard errors
  35.     //  defined by MAPI and errors returned by objects we keep and utilize.
  36.     enum {eNoError, eExtended, eMAPI, eObject} m_eLastErr;
  37.     HRESULT     m_hrLast;
  38.     HRESULT     m_hrGLE;  // what GetLastError on the object returned; mostly 0
  39.     LPMAPIERROR m_pmapierr;
  40.     LPSTR m_szComponent;
  41. };
  42. inline CLastError::CLastError(LPSTR szComponent)
  43. {
  44.     m_eLastErr = eNoError;
  45.     m_hrLast = 0;
  46.     m_hrGLE = 0;
  47.     m_pmapierr = 0;
  48.     m_szComponent = NULL;
  49.     
  50.     if(!MAPIAllocateBuffer(lstrlen(szComponent) +1,
  51.                         (LPVOID *) &m_szComponent))
  52.     {
  53.         lstrcpy(m_szComponent, szComponent);
  54.     }
  55.     
  56. }
  57. inline CLastError::~CLastError()
  58. {
  59.     if (m_pmapierr != NULL)
  60.     {
  61.         MAPIFreeBuffer(m_pmapierr);
  62.     }
  63.     if(m_szComponent != NULL)
  64.     {
  65.         MAPIFreeBuffer(m_szComponent);
  66.     }
  67. }
  68. #endif // __LASTERR_H__