Back

#include "stdafx.h"
#include "PSLExceptions.h"
#include "ProSysModule.h"
#include "resource.h"

#define IMPL_EXCEPTION(E)\
   case EX_##E:\
   {\
      tstring s;\
      s.resize(1024);\
      ::LoadString(_Module.GetResourceInstance(), IDS_##E, (LPTSTR)s.c_str(), 1024);\
      return AtlReportError(clsID, (LPCOLESTR)(LPCTSTR)s.c_str(), ID, E_##E);\
   }


HRESULT GetGlobalExitCode(long exCode, const CLSID & clsID, const IID ID)
{
   if(!exCode)
      return S_OK;

   switch(exCode)
   {
      IMPL_EXCEPTION(GENERALFAILURE)
      IMPL_EXCEPTION(INDEXOUTOFRANGE)
      IMPL_EXCEPTION(NOTIMPLEMENTED)
      IMPL_EXCEPTION(LOWMEMORY)
      IMPL_EXCEPTION(NOACCESS)
      IMPL_EXCEPTION(INVALIDPARAMETER)
      IMPL_EXCEPTION(WMIERROR)
   default:
      throw;   // If this ever happens, it's because I forgot to add
            // implementation macro to a new exception type;
   }

   return S_FALSE;
}

Top