Jump to content


Photo

[MULTILENGUAJE] Obtener Mensaje de error del sistema.


  • Please log in to reply
5 replies to this topic

#1 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 28 February 2012 - 03:20 PM

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

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 28 February 2012 - 03:25 PM

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

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 28 February 2012 - 04:34 PM

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

:embarrassed:

Saludox ! :)
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 28 February 2012 - 04:50 PM

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

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 28 February 2012 - 05:37 PM

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
  • 566 posts
  • LocationEspaña

Posted 29 February 2012 - 09:44 AM

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

Muy buen truco, amigo
  • 0




IP.Board spam blocked by CleanTalk.