Figure 2: Sample application demonstrating use of exceptions library

#pragma warning(disable:4786) // TURN OFF THE 'BROWSER OUTPUT 
                              // TRUNCATED TO 255' WARNING.  
                              // IT'S MEANINGLESS.
#include <string>
#include <sstream>
#include <windows.h>
#include <winnt.h>
using namespace std;
#include "EXExceptions.h"
#include "TestMessages.h"
void main()
{
  // REGISTER THE MESSAGE TABLE - SIMULATE BY REGISTERING THE APP.
  string Module(BUFSIZ,'\0');
  // THIS APP RUNS AS A CONSOLE APP.  IT DOESN'T HAVE AN 
  // INSTANCE HANDLE. SO LET'S GET AN INSTANCE HANDLE
  HMODULE hModule = GetModuleHandle("Tester.exe");
  // THIS IS THE IMPORTANT CALL - GETS THE FULLY QUALIFIED PATH 
  // NAME OF THE COMPONENT.
  GetModuleFileName(hModule,const_cast<char*>(Module.c_str()),
    Module.size());
  EXBase_c::Register(Module,FACILITY_TESTER); // REGISTERS THIS APP 
                                              // WITH THE LIBRARY
 
  // VARIOUS EXCEPTIONS AND LOGGING CAPABILITIES ARE EXERCIZED HERE
  try
  { // PRIVATE EXCEPTION DEFINED IN THE APP'S MC FILE
    throw EXSystem_c(__LINE__, __FILE__, TEST_EXCEPTION,
      EXBase_c::EXTrace);
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected", MB_ICONSTOP | MB_OK);
  }
  try
  { // THIS WILL PRODUCE TWO IDENTICAL ENTRIES IN THE LOG - SHOWS 
    // THAT YOU DON'T HAVE TO THROW TO LOG!
    EXSanity_c(__LINE__, __FILE__, PROGRAM_ABORTED,
      EXBase_c::EXError); // JUST LOG THE ERROR
    throw EXSanity_c(__LINE__, __FILE__, PROGRAM_ABORTED,
      EXBase_c::EXError); // NOW THROW THE SAME THING
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected",MB_ICONSTOP | MB_OK);
  }
 
  try
  { // FORCE AN ACCESS VIOLATION ON A WRITE
    char* pTest = NULL;
    strcpy(pTest,"Yahoo!");
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected",MB_ICONSTOP | MB_OK);
  }

  try
  { // FORCE AN ACCESS VIOLATION ON A READ
    char* pTest = NULL;
    char x = *pTest;
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected",MB_ICONSTOP | MB_OK);
  }

  try
  { // FORCE A DIVIDE BY ZERO FAULT
    int a = 0,x = 5 / a;
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected",MB_ICONSTOP | MB_OK);
  }

  try
  { // SIMULATE AN OS EXCEPTION - THE VALUE WOULD BE REPLACED 
    // BY GetLastError()
    throw EXSystem_c(__LINE__, __FILE__, ERROR_REGISTRY_RECOVERED,
      EXBase_c::EXWarning);
  }
  catch(EXBase_c& e)
  {
    MessageBox(GetActiveWindow(), e.Message().c_str(),
      "EXBase exception detected",MB_ICONSTOP | MB_OK);
  }

  // UNSET THE EXCEPTION HANDLERS.
  EXBase_c::DeInitialize();
}
//End of File