VBasicFacil

Principal - Enlaces - Código - Controles - API


Función FormatMessage

Declaración

Public Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long

Plataformas

Descripción

Obtiene el código de error devuelto por las ultimas llamadas a funciones de la API. La mayor parte de las funciones devuelven un número si ocurre un error, pero no indica que error se produce exactamente. Esta función toma el "código de error universal" identificando el ultimo error ocurrido. Tenga en cuenta que la mayoría de las funciones devuelve 0 si finaliza satisfactoriamente, borrando el código anterior. Por tanto, compruebe este código de error en cuanto se produzca.

Parámetros

dwFlags Contiene una cadena de bits que indican como formatear y procesar el parámetro lpSource. El bit de menor orden indica como se maneja el fin de línea en el buffer de salida. Este bit, además, puede indicar el ancho máximo de una línea de salida formateada. Se pueden especificar una combinación de los siguientes valores:

FORMAT_MESSAGE_ALLOCATE_BUFFER Indica que el parámetro lpBuffer es un puntero a PVOID pointer, y que el parámetro nSize indica el número mínimo de bytes (versión ANSI) o caracteres (versión Unicode) a almacenar por el buffer del mensaje de salida. La función almacena un buffer suficientemente largo para albergar el mensaje formateado, y crea un puntero para albergar la dirección especificada por lpBuffer.

FORMAT_MESSAGE_IGNORE_INSERTS Indica que las instrucciones incluidas en la definición del mensaje sean ignoradas y las traspase al buffer de salida sin cambio. Este indicador es usado para mejorar el formateado posterior del mensaje. Si se usa este indicador se ignorará el parámetro Arguments.

FORMAT_MESSAGE_FROM_STRING Especifica que lpSource es un puntero a un mensaje terminado en un carácter nulo. La definición del mensaje puede incluir instrucciones. No se puede usar con FORMAT_MESSAGE_FROM_HMODULE o FORMAT_MESSAGE_FROM_SYSTEM.

FORMAT_MESSAGE_FROM_HMODULE Indica que lpSource es un manejador de modulo que contiene la tabla de mensajes de recursos a buscar. No se puede usar con FORMAT_MESSAGE_FROM_STRING.

FORMAT_MESSAGE_FROM_SYSTEM Indica que la función puede buscar el mensaje solicitado en la tabla de mensajes de recursos del sistema. Si va unido a FORMAT_MESSAGE_FROM_HMODULE, la función busca la tabla de mensajes del sistema en caso de no encontrarlo en el modulo especificado por lpSource. No se puede usar con FORMAT_MESSAGE_FROM_STRING.

FORMAT_MESSAGE_ARGUMENT_ARRAY Indica que el parámetro Arguments no es una estructura va_list, sino que es un puntero a una cadena de valores de 32 bits que representa el argumento.

El byte de orden inferior de dwFlags puede indicar el ancho máximo de una línea de salida formateada. Use la constante FORMAT_MESSAGE_MAX_WIDTH_MASK y el operador booleano bitwise Boolean para enviar o recibir este ancho máximo.

La siguiente tabla muestra como FormatMessage interpreta el valor del byte de orden inferior.

0 No hay restricciones en el ancho. La función almacena los saltos de linea definidos del mensaje en el buffer de salida.

Un valor distinto de cero es el número máximo de caracteres de la línea de salida. La función ignora los saltos de línea en el texto de los mensajes. La función nunca corta una cadena delimitada por espacios en blanco con un salto de línea. Los saltos de línea estan codificados con códigos de escape.

FORMAT_MESSAGE_MAX_WIDTH_MASK La función no genera nuevos saltos de linea.

lpSource Indica la localización del mensaje. El tipo de este parámetro depende de los valores del parámetro dwFlags.

FORMAT_MESSAGE_FROM_HMODULE lpSource es un hModule del modulo que contiene el mensaje a buscar.

FORMAT_MESSAGE_FROM_STRING lpSource ES UNLPTSTR que apunta al texto sin formatear. Puede ser usado para formatear el texto adecuadamente.

Si no se usa ninguno de estos indicadores en dwFlags, entonces lpSource es ignorado.

dwMessageId Identificador de 32 bits del mensaje de respuesta. Este parámetro es ignorado si dwFlags incluye FORMAT_MESSAGE_FROM_STRING.

dwLanguageId Identificador de 32 bits del lenguaje del mensaje de solicitado. Este parámetro es ignorado si dwFlags incluye FORMAT_MESSAGE_FROM_STRING. Si pasa un LANGID especifico en este parámetro, FormatMessage devolverá un mensaje solo para ese LANGID. Si la función no puede encontrar un mensaje para eses LANGID especifico, devolverá un ERROR_RESOURCE_LANG_NOT_FOUND. Si pasa un, FormatMessage busca un mensaje para LANGIDs en el siguiente orden:

    1. Lenguaje neutral
    2. LANGID del hilo, basado en los valores locales de los hilos.
    3. LANGID por defecto del usuario, basado en los valores locales por defecto del usuario.
    4. LANGID por defecto del sistema, basado en los valores locales por defecto del sistema.
    5. Si no encuentra ninguno de los LANGIDs anteriores usara ingles (americano), devuelve un mensaje en cualqueir idioma si es que existe, sino devuelve ERROR_RESOURCE_LANG_NOT_FOUND.

lpBuffer Apunta a un buffer para recibir el mensaje formateado (incluyendo el caracter nulo de terminación). Si dwFlags incluye FORMAT_MESSAGE_ALLOCATE_BUFFER, la función asignara un buffer usando la función LocalAlloc, y almacenará la dirección del buffer en la dirección especificada por lpBuffer.

nSize Tamaño máximo del mensaje de respuesta. Si el indicador FORMAT_MESSAGE_ALLOCATE_BUFFER no se usa, este parámetro indica el número máximo de bytes (versión ANSI) o caracteres (versión Unicode) que pueden ser almacenados en el buffer de salida. Si se usa FORMAT_MESSAGE_ALLOCATE_BUFFER, este parámetro indicara el número mínimo de bytes o caracteres reservados para el buffer de salida.

Arguments Puntero a una tabla de valores de 32 bits usada para referenciar cada una de las cadenas del mensaje. Por defecto, el parámetro Arguments es de tipo va_list*, que es un tipo de dato especifico para describir un numero variable de argumentos. Si no tiene un tipo va_list*, use entonces FORMAT_MESSAGE_ARGUMENT_ARRAY y pase un puntero a una tabla de valores de 32 bits; cada valor tendrá su elemento correspondiente en la tabla.

El valor devuelto si la función finaliza sin error es el numero de bytes/caracteres almacenados en el buffer de salida, sin incluir el carácter nulo de terminación. Si se produce un error la función devuelve un 0. Para obtener información adicional llame a la función GetLastError.

Ejemplo

Como recuperar el último error que se ha producido.

Formulario (Contiene un ControlButton) (Este ejemplo procede de una página de trucos de Microsoft, aunque tenia un error !! )

Option Explicit


Private Sub Command1_Click()
    MsgBox InformacionError
End Sub
		

Modulo

Option Explicit


Public Declare Function GetLastError _
    Lib "kernel32" () As Long
Public Declare Function FormatMessage _
    Lib "kernel32" _
    Alias "FormatMessageA" _
   (ByVal dwFlags As Long, _
    lpSource As Any, _
    ByVal dwMessageId As Long, _
    ByVal dwLanguageId As Long, _
    ByVal lpBuffer As String, _
    ByVal nSize As Long, _
    Arguments As Long) As Long

Public Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000

Public Function InformacionError() As String
    Dim sError As String * 500
    Dim lErrNum As Long
    Dim lErrMsg As Long

    lErrNum = GetLastError
    lErrMsg = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, _
                ByVal 0&, lErrNum, 0, sError, Len(sError), 0)
    InformacionError = Trim(sError)
End Function
Descargar código : GetLastError.zip

 

Aplicaciones: Programa para ver los mensajes de error que corresponden a cada código de error

Ver también: GetLastError, SetLastError

Categoría: Errores


Ultima actualización : 30 de noviembre de 2001
Copyright © 2001 Silared, s.l.
correo-e : vbasicfacil@silared.com
Site : www.vbasicfacil.com