Hola de nuevo,
buceando en las posibilidades de identificar el error que lanza una excepción, encuentro cuatro formas distintas, de acuerdo a la situación que se imponga, naturalmente, que la opción recomendada por joseluisbz es el más práctico en la mayoría de los casos.
Usando el mismo ejemplo:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int TheZero = 0;
try
{
int BadDivision =1/TheZero;
}
catch(Exception &e)
{
// 1) Mensaje estandar de la excepción interseptada:
Application->ShowException(& e);
// 2) Mensaje que elegimos para EDivByZero:
throw EDivByZero("Este es el mensaje elegidol "
"para a EDivByZero");
// Formateamos el mensaje:
LPVOID BufferDelMensaje;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &BufferDelMensaje,
0,
NULL
);
// 3) mensaje de GetLastError en el idioma por defecto:
MessageBox( NULL,
(LPTSTR)BufferDelMensaje,
"GetLastError formateado",
MB_OK|MB_ICONINFORMATION
);
// libera la memoria asignada a BufferDelMensaje:
LocalFree( BufferDelMensaje );
// 4) Acción elejida por nosotros, por ejemplo:
ShowMessage("int BadDivision =1/TheZero;");
}
}