Ver Mensaje Individual
  #16  
Antiguo 21-10-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
ghLastErrorMsg y ghRaiseLastError

Quienes han usado directamente la API de Windows tendrán muy presente que esta no suele elevar excepciones al ocurrir una situación de error. En lugar de eso, la API de Windows establece un código de error numérico que podemos recuperar con la función GetLastError. A veces es necesario convertir este código de error a algo que sea relativamente comprensible para el usuario de la aplicación (aunque más útil para el programador que recibirá el reporte del usuario), y para ello Delphi cuenta con la función SysErrorMessage, la cual envuelve a la función FormatMessage del sistema operativo.

También es común que, una vez obtenido el texto del error, queramos elevar una excepción Delphi con él. Así ocurre por ejemplo en este caso:
Código Delphi [-]
else
  raise Exception.Create(SysErrorMessage(GetLastError));
Con GHF, para obtener el texto del error, podemos usar la función ghLastErrorMsg:
Código Delphi [-]
else
  raise Exception.Create (ghLastErrorMsg);
Pero podemos simplificar un poco más toda la sentencia usando la función ghRaiseLastError:
Código Delphi [-]
else
  ghRaiseLastError;
Internamente, esta función llama a ghLastErrorMsg y eleva una excepción con el texto del error. Además, ghRaiseLastError admite un parámetro opcional de tipo String para indicar el formato a dar al mensaje de error. Si no se especifica el formato, se utiliza el predeterminado '%s (GetLastError %d).', viéndose el mensaje de excepción como en este ejemplo:



El formato se aplica con la función estándar Format que todos conocemos. "%s" indica en qué parte del mensaje de excepción debe ghRaiseLastError poner el texto del error devuelto por ghLastErrorMsg. "%d" significa que en esa posición debe aparecer el código de error numérico que arrojó GetLastError. Cualquiera de los dos comodines puede ser omitido, por lo que el formato de la excepción es totalmente flexible. Sólo considerar que en la llamada interna a Format, el texto del error es el primer parámetro y el código numérico el segundo. Otro ejemplo:
Código Delphi [-]
ghRaiseLastError ('No fue posible realizar la operación.'#13#10 +
  'Error interno %1:d (%0:s).');
Resultado:



Posteriormente agregaré la documentación detallada de estas dos funciones al manual de referencia.

Un saludo.

Al González.

Última edición por Al González fecha: 22-10-2013 a las 00:40:04.
Responder Con Cita