Ir al contenido


Foto

[MULTILENGUAJE] Obtener Mensaje de error del sistema.


  • Por favor identifícate para responder
5 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.965 mensajes
  • LocationMadrid - España

Escrito 28 febrero 2012 - 03:20

Este truco es muy simple pero de mucha utilidad para los que no lo conozcan. Se trata de obtener y mostrar la cadena de texto definida por GetLastError:

delphi
  1. ShowMessage(SysErrorMessage(GetLastError));

Y en Builder C++ : 

cpp
  1. ShowMessage(SysErrorMessage(GetLastError()));

 


Saludos.
  • 0

#2 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 28 febrero 2012 - 03:25

Hola
Muy practico, no lo conocía. (y)
Gracias amigo. (y)
Saludos
  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 febrero 2012 - 04:34

Y ese código dónde iría ?  *-)

:embarrassed:

Saludox ! :)
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.965 mensajes
  • LocationMadrid - España

Escrito 28 febrero 2012 - 04:50

Ese código muestra un MessageBox con el error producido. Cuando se produce un error de sistema, GetLastError es diferente de 0 ese es el código de error. Para encontrar la cadena del mensaje que corresponda, delphi tiene la función SysErrorMessage.

El código iría en el punto donde queramos mostrar el error, que sabemos se ha producido.


Saludos.
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.965 mensajes
  • LocationMadrid - España

Escrito 28 febrero 2012 - 05:37

Para ilustrar un poco mas el truco, he desarrollado un ejemplo usando sólo la API, de esta forma se puede ver como funciona, a bajo nivel, el asunto de encontrar la cadena asociada a un código de error.

Muestro dos ejemplos en C/C++ y Delphi:


cpp
  1. void ShowMessageError(HWND hWnd, char* Title)
  2. {
  3.   char *pBuffer;
  4.   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL,
  5.                 GetLastError(), 0, (char*)&pBuffer, 0, NULL);
  6.   MessageBox(hWnd, pBuffer, Title, MB_OK);
  7.   LocalFree(pBuffer);
  8. }



delphi
  1. procedure ShowMessageError(hWin: HWND; Title: PCHAR);
  2. var
  3.   pBuffer: pointer;
  4. begin
  5.   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ALLOCATE_BUFFER, nil,
  6.                 GetLastError, 0, @pBuffer, 0, nil );
  7.   MessageBox(hWin, pBuffer, Title, MB_OK);
  8.   LocalFree(Cardinal(pBuffer));
  9. end;

Ejemplo de uso para ambos lenguajes:

delphi
  1.   ShowMessageError(Handle, 0);


Saludos.
  • 0

#6 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 557 mensajes
  • LocationEspaña

Escrito 29 febrero 2012 - 09:44

Maestro escafandra... Como siempre, me dejas sin aliento  :|

Muy buen truco, amigo
  • 0