Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


Opciones Borland C++ para manejo de excepciones

§1  Sinopsis

El compilador Borland C++ 5.5 permite controlar excepciones asíncronas (lanzadas por el Sistema Operativo), que incluyen situaciones como intentos de accesos ilegales (a zonas de memoria no controladas por la aplicación); errores matemáticos con enteros o con números de punto flotante; desbordamiento de la pila, e interrupciones de teclado Ctrl+C.

Estas excepciones son manejadas en la librería C++ RTL ( 5), y convertidas a objetos de las clases VCL antes de ser devueltas a la aplicación, donde deben ser capturadas siempre por referencia. Las clases VCL utilizadas por este compilador son las mismas que para Delphi, y solo están disponibles para aplicaciones Borland C++ que las utilicen.

El código resultante no es C++ Estándar, y tendría el siguiente aspecto:

try {       // bloque intento
  char* p = 0;
  *p = 0;   // intento de acceso ilegal (posible excepción del Sistema)
}
catch (const EAccessViolation &e) {  // captura de e por referencia
  cout << "No se puede asignar al objeto señalado por un puntero nulo";
}


Algunas de las características del sistema de excepciones de este compilador C++ son las siguientes:

  • El usuario no tiene que preocuparse de destruir el objeto lanzado en la excepción.

  • Las excepciones lanzadas por el Sistema Operativo deben ser capturadas por referencia.

  • Las excepciones lanzadas por el Sistema Operativo deben ser capturadas por los mecanismos correspondientes VCL.

  • No está permitido relanzar una excepción recibida del sistema una vez que se ha salido del bloque catch.

Las tres últimas condiciones pueden ser también enunciadas así: una vez capturada una excepción del Sistema como una excepción C++, no puede ser relanzada como si fuese una excepción VCL o del sistema, a menos que se esté en el mismo marco de la pila.


Las excepciones Win32 son lanzadas con una llamada a la función RaiseException() cuyo prototipo es el siguiente:

void RaiseException(DWORD ec, DWORD ef, DWORD na, const DWORD* a);

  ec  código de la excepción

  ef  etiqueta de excepción. Su valor puede ser 0 o la constante EXCEPTION_NONCONTINUABLE. En caso que la excepción sea no-continuable y se intente continuarla, se invoca raise(EXCEPTION_NONCONTINUABLE_EXCEPTION) ( 1.5.1).

  na número de elementos de la matriz utilizada como argumento.

  a  puntero al primer elemento de la matriz utilizada como argumento. El significado de sus miembros es dependiente de la excepción lanzada en cada caso.