На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

FormatMessage



The FormatMessage function formats a message string. The function requires a message definition as input. The message definition can come from a buffer passed into the function. It can come from a message table resource in an already-loaded module. Or the caller can ask the function to search the system's message table resource(s) for the message definition. The function finds the message definition in a message table resource based on a message identifier and a language identifier. The function copies the formatted message text to an output buffer, processing any embedded insert sequences if requested.

DWORD FormatMessage(

DWORD dwFlags, // source and processing options
LPCVOID lpSource, // pointer to message source
DWORD dwMessageId, // requested message identifier
DWORD dwLanguageId, // language identifier for requested message
LPTSTR lpBuffer, // pointer to message buffer
DWORD nSize, // maximum size of message buffer
va_list *Arguments // address of array of message inserts
);


Parameters

dwFlags

Contains a set of bit flags that specify aspects of the formatting process and how to interpret the lpSource parameter. The low-order byte of dwFlags specifies how the function handles line breaks in the output buffer. The low-order byte can also specify the maximum width of a formatted output line.
You can specify a combination of the following bit flags:

Value Meaning
FORMAT_MESSAGE_ALLOCATE_BUFFER
Specifies that the lpBuffer parameter is a pointer to a PVOID pointer, and that the nSize parameter specifies the minimum number of bytes (ANSI version) or characters (Unicode version) to allocate for an output message buffer. The function allocates a buffer large enough to hold the formatted message, and places a pointer to the allocated buffer at the address specified by lpBuffer. The caller should use the LocalFree function to free the buffer when it is no longer needed.
FORMAT_MESSAGE_IGNORE_INSERTS
Specifies that insert sequences in the message definition are to be ignored and passed through to the output buffer unchanged. This flag is useful for fetching a message for later formatting. If this flag is set, the Arguments parameter is ignored.
FORMAT_MESSAGE_FROM_STRING
Specifies that lpSource is a pointer to a null-terminated message definition. The message definition may contain insert sequences, just as the message text in a message table resource may. Cannot be used with FORMAT_MESSAGE_FROM_HMODULE or FORMAT_MESSAGE_FROM_SYSTEM.
FORMAT_MESSAGE_FROM_HMODULE
Specifies that lpSource is a module handle containing the message-table resource(s) to search. If this lpSource handle is NULL, the current process's application image file will be searched. Cannot be used with FORMAT_MESSAGE_FROM_STRING.
FORMAT_MESSAGE_FROM_SYSTEM
Specifies that the function should search the system message-table resource(s) for the requested message. If this flag is specified with FORMAT_MESSAGE_FROM_HMODULE, the function searches the system message table if the message is not found in the module specified by lpSource. Cannot be used with FORMAT_MESSAGE_FROM_STRING.If this flag is specified, an application can pass the result of the GetLastError function to retrieve the message text for a system-defined error.
FORMAT_MESSAGE_ARGUMENT_ARRAY
Specifies that the Arguments parameter is not a va_list structure, but instead is just a pointer to an array of 32-bit values that represent the arguments.


The low-order byte of dwFlags can specify the maximum width of a formatted output line. Use the FORMAT_MESSAGE_MAX_WIDTH_MASK constant and bitwise Boolean operations to set and retrieve this maximum width value.
The following table shows how FormatMessage interprets the value of the low-order byte.

Value Meaning
0 There are no output line width restrictions. The function stores line breaks that are in the message definition text into the output buffer.
A nonzero value other than FORMAT_MESSAGE_MAX_WIDTH_MASK The nonzero value is the maximum number of characters in an output line. The function ignores regular line breaks in the message definition text. The function never splits a string delimited by white space across a line break. The function stores hard-coded line breaks in the message definition text into the output buffer. Hard-coded line breaks are coded with the %n escape sequence.
FORMAT_MESSAGE_MAX_WIDTH_MASK The function ignores regular line breaks in the message definition text. The function stores hard-coded line breaks in the message definition text into the output buffer. The function generates no new line breaks.


lpSource

Specifies the location of the message definition. The type of this parameter depends upon the settings in the dwFlags parameter.

dwFlags Setting Parameter Type
FORMAT_MESSAGE_FROM_HMODULE lpSource is an hModule of the module that contains the message table to search.
FORMAT_MESSAGE_FROM_STRING lpSource is an LPTSTR that points to unformatted message text. It will be scanned for inserts and formatted accordingly.


If neither of these flags is set in dwFlags, then lpSource is ignored.

dwMessageId

Specifies the 32-bit message identifier for the requested message. This parameter is ignored if dwFlags includes FORMAT_MESSAGE_FROM_STRING.

dwLanguageId

Specifies the 32-bit language identifier for the requested message. This parameter is ignored if dwFlags includes FORMAT_MESSAGE_FROM_STRING.
If you pass a specific LANGID in this parameter, FormatMessage will return a message for that LANGID only. If the function cannot find a message for that LANGID, it returns ERROR_RESOURCE_LANG_NOT_FOUND. If you pass in zero, FormatMessage looks for a message for LANGIDs in the following order:

1. Language neutral
2. Thread LANGID, based on the thread's locale value
3. User default LANGID, based on the user's default locale value
4. System default LANGID, based on the system default locale value
5. US English



If FormatMessage doesn't find a message for any of the above LANGIDs, it returns any language message string that is present. If even that fails, it returns ERROR_RESOURCE_LANG_NOT_FOUND.

lpBuffer

Points to a buffer for the formatted (and null-terminated) message. If dwFlags includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the address of the buffer at the address specified in lpBuffer.

nSize

If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of bytes (ANSI version) or characters (Unicode version) that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of bytes or characters to allocate for an output buffer.

Arguments

Points to an array of 32-bit values that are used as insert values in the formatted message. %1 in the format string indicates the first value in the Arguments array; %2 indicates the second argument; and so on.
The interpretation of each 32-bit value depends on the formatting information associated with the insert in the message definition. The default is to treat each value as a pointer to a null-terminated string.
By default, the Arguments parameter is of type va_list*, which is a language- and implementation-specific data type for describing a variable number of arguments. If you do not have a pointer of type va_list*, then specify the FORMAT_MESSAGE_ARGUMENT_ARRAY flag and pass a pointer to an array of 32-bit values; those values are input to the message formatted as the insert values. Each insert must have a corresponding element in the array.



Return Values

If the function succeeds, the return value is the number of bytes (ANSI version) or characters (Unicode version) stored in the output buffer, excluding the terminating null character.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The FormatMessage function can be used to obtain error message strings for the system error codes returned by GetLastError, as shown in the following sample code.

LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);

// Display the string.
MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );


Within the message text, several escape sequences are supported for dynamically formatting the message. These escape sequences and their meanings are shown in the following table. All escape sequences start with the percent character (%).

Escape Sequence Meaning
%0 Terminates a message text line without a trailing newline character. This escape sequence can be used to build up long lines or to terminate the message itself without a trailing newline character. It is useful for prompt messages.
%n!printf format string! Identifies an insert. The value of n can be in the range 1 through 99. The printf format string (which must be bracketed by exclamation marks) is optional and defaults to !s! if not specified.
The printf format string can contain the * specifier for either the precision or the width component. If * is specified for one component, the FormatMessage function uses insert %n+1; it uses %n+2 if * is specified for both components.
Floating-point printf format specifiers ѕ e, E, f, and g ѕ are not supported. The workaround is to to use the sprintf function to format the floating-point number into a temporary buffer, then use that buffer as the insert string.


Any other nondigit character following a percent character is formatted in the output message without the percent character. Following are some examples:

Format string Resulting output
%% A single percent sign in the formatted message text.
%n A hard line break when the format string occurs at the end of a line. This format string is useful when FormatMessage is supplying regular line breaks so the message fits in a certain width.
%space A space in the formatted message text. This format string can be used to ensure the appropriate number of trailing spaces in a message text line.
%. A single period in the formatted message text. This format string can be used to include a single period at the beginning of a line without terminating the message text definition.
%! A single exclamation point in the formatted message text. This format string can be used to include an exclamation point immediately after an insert without its being mistaken for the beginning of a printf format string.


See Also

LoadString, LocalFree


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

FormatMessage



Функция FormatMessage форматирует строку сообщения. Функция требует определение сообщения как ввод. Определение сообщения может исходить из буфера пройденного в функцию. Это может исходить из табличного ресурса сообщения в уже- загруженном модуле. Или вызывающий оператор может спросить, чтобы функция искала табличный ресурс системного сообщения(сообщений) для определения сообщения. Функция находит определение сообщения в табличном ресурсе сообщения основанном в идентификаторе сообщения и языковой идентификатор. Функция копирует форматированный текст сообщения на выходной буфер, обрабатывающий любым вложенным включать последовательности если запрошено.

DWORD FormatMessage(

DWORD dwFlags, // ИСТОЧНИК и обрабатывающие опции LPCVOID lpSource, // указатель в источник сообщения DWORD dwMessageId, // запрошенного идентификатора сообщения DWORD dwLanguageId, // языкового идентификатора для запрошенного сообщения LPTSTR lpBuffer, // указатель в буфер сообщения DWORD nSize, // максимальный размер буфера сообщения va_list *Аргументы // адрес массива сообщения включается
);


Параметры

dwFlags

Содержит установку битовых флагов, которые определяют аспекты форматирования процесса и как, чтобы интерпретировать параметр lpSource. Младший байт dwFlags определяет как функция оперирует прерывания строки в выходном буфере. Младший байт может также определить максимальную ширину форматированной выходной строки.
Вы можете определить комбинацию битовых флагов следующего:

Значение Величины
FORMAT_MESSAGE_ALLOCATE_BUFFER
Определяет, что параметр lpBuffer является указателем на указатель PVOID, и, что параметр nSize определяет минимальное количество байтов (версия ANSI) или символы (версия Уникода), чтобы распределяться для выходного буфера сообщения. Функция распределяет буферный большой достаточно, чтобы проводить форматированное сообщение и устанавливать указатель в размещенный буфер по адресу определенный lpBuffer. Вызывающий оператор должен использовать функцию LocalFree, чтобы освобождать буфер когда он не - больше не нужно.
FORMAT_MESSAGE_IGNORE_INSERTS
Определяет, что включает последовательности в определение сообщения должно быть проигнорировано и пройдено вплоть до выходного буферного неизменного. Этот флаг полезный для выборки сообщения для последующего форматирования. Если этот флаг установлен, параметр Аргументов проигнорирован.
FORMAT_MESSAGE_FROM_STRING
Определяет, что lpSource - указатель в недействительный расторгнутом определении сообщения. Определение сообщения может содержать включать последовательности, подобно тому, как текст сообщения в табличном ресурсе сообщения может. Не может быть использовано FORMAT_MESSAGE_FROM_HMODULE или FORMAT_MESSAGE_FROM_SYSTEM.
FORMAT_MESSAGE_FROM_HMODULE
Определяет, что lpSource - модульная ручка, содержащая сообщений-табличный ресурс(ресурсы), чтобы искаться. Если эта ручка lpSource НЕДЕЙСТВИТЕЛЬНА, прикладной образ текущего файла процесса будет поискан. Не может быть использовано FORMAT_MESSAGE_FROM_STRING.
FORMAT_MESSAGE_FROM_SYSTEM
Определяет, что функция поищет системный сообщений-табличный ресурс(ресурсы) для запрошенного сообщения. Если этот флаг определен FORMAT_MESSAGE_FROM_HMODULE, функция ищет системную таблицу сообщения если сообщение не обнаружено в модуле определенном lpSource. Не может быть использовано FORMAT_MESSAGE_FROM_STRING.If этого флага определен, приложение может передать результат функции GetLastError, чтобы извлекать текст сообщения для определенной системной ошибки.
FORMAT_MESSAGE_ARGUMENT_ARRAY
Определяет, что параметр Аргументов является не va_list структура, но взамен - просто указатель в массив 32- битовых величин, который представляет аргументы.


Младший байт dwFlags может определить максимальную ширину форматированной выходной строки. Используйте FORMAT_MESSAGE_MAX_WIDTH_MASK постоянные и поразрядные Логические операции, чтобы устанавливать и извлекать эту максимальную широтную величину.
Следующая таблица показывает, как FormatMessage интерпретирует величину младшего байта.

Значение Величины
0 Нет широтных ограничений выходной строки. Функция загружает прерывания строки, которые - в тексте определения сообщения в выходной буфер.
Ненулевая величина кроме FORMAT_MESSAGE_MAX_WIDTH_MASK ненулевая величина является максимальным количеством символов в выходной строке. Функция игнорирует регулярные прерывания строки в тексте определения сообщения. Функция никогда не разделяет строку ограниченную интервалом через прерывание строки. Функция загружается трудно-закодировавшее строку прерывается в тексте определения сообщения в выходной буфер. Трудно-закодировавшее прерывания строки закодированы %последовательностью n перехода.
FORMAT_MESSAGE_MAX_WIDTH_MASK функция игнорирует регулярные прерывания строки в тексте определения сообщения. Функция загружается трудно-закодировавшее строку прерывается в тексте определения сообщения в выходной буфер. Функция не генерирует никакие новые прерывания строки.


lpSource

Определяет позицию определения сообщения. Тип этого параметра зависит от установочных параметров в параметре dwFlags.

dwFlags, Устанавливающий Тип Параметра
FORMAT_MESSAGE_FROM_HMODULE lpSource - hModule модуль, что содержит таблицу сообщения, чтобы искаться.
FORMAT_MESSAGE_FROM_STRING lpSource - LPTSTR, что указывает на бесформатный текст сообщения. Это будет сканировано для включает и отформатированное соответственно.


Если ни одно из этих флагов не установлен в dwFlags, тогда lpSource проигнорирован.

dwMessageId

Определяет 32- битовый идентификатор сообщения для запрошенного сообщения. Этот параметр проигнорирован если dwFlags включает FORMAT_MESSAGE_FROM_STRING.

dwLanguageId

Определяет 32- битовый языковой идентификатор для запрошенного сообщения. Этот параметр проигнорирован если dwFlags включает FORMAT_MESSAGE_FROM_STRING.
Если Вы передаете специфический LANGID в этом параметре, FormatMessage возвращает сообщение для этого LANGID только. Если функция не может найти сообщение для этого LANGID, это возвращает ERROR_RESOURCE_LANG_NOT_FOUND. Если Вы проходите в нуль, FormatMessage ищет сообщение для LANGIDs в следующем порядке:

1. Языковой нейтральный
2. Резьба LANGID, основывалась на месте действия величины резьбы
3. Умолчание Пользователя LANGID, основывалось на по умолчанию месте действия величины пользователя
4. Системное умолчание LANGID, основывалось на системном по умолчанию месте действия величины
5. ОН Английский



Если FormatMessage не находит сообщение для любого из вышеуказанного LANGIDs, это возвращает любую языковую строку сообщения, которая присутствует. Если даже, что терпит неудачу, это возвращает ERROR_RESOURCE_LANG_NOT_FOUND.

lpBuffer

Точки на буфер для форматированного сообщения (и недействительный расторгнутый). Если dwFlags включает FORMAT_MESSAGE_ALLOCATE_BUFFER, функция распределяет буфер, использовавший функцию LocalAlloc и устанавливает адрес буфера по адресу определенному в lpBuffer.

nSize

Если флаг FORMAT_MESSAGE_ALLOCATE_BUFFER не установлен, этот параметр определяет максимальное количество байтов (версия ANSI) или символы (версия Уникода), который может быть загружен в выходной буфер. Если FORMAT_MESSAGE_ALLOCATE_BUFFER установлен, этот параметр определяет минимальное количество байтов или символов, чтобы распределяться для выходного буфера.

Аргументы

Точки на массив 32- битовых величин, которые использованы как включать величины в форматированный message. %1 в строке формата указывает первую величину в массиве Аргументов; %2 указывает второй аргумент; и так далее.
Интерпретация каждой 32- битовой величины зависит от форматирующей информации связанной включаться в определение сообщения. Умолчание должно рассматривать каждую величину как указатель в недействительный расторгнутую строку.
По умолчанию, параметр Аргументов - типа va_list*, который является языком- и реализация-специфический тип данных чтобы описывать переменное количество аргументов. Если у вас нет указателя типа va_list*, тогда определите флаг FORMAT_MESSAGE_ARGUMENT_ARRAY и передавайте указатель в массив 32- битовых величин; те величины являются вводом в сообщение отформатированное как включать величины. Каждый включает, должно иметь соответствующий элемент в массиве.



Обратные Величины

Если функция добивается успеха, обратная величина является количеством байтов (версия ANSI) или символы (версия Уникода) загружались в выходной буфер, исключающий завершающий недействительный символ.
Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы расширять информацию ошибки, вызовите GetLastError.

Замечания

Функция FormatMessage может быть использована, чтобы получать строки сообщения ошибки для системных кодов ошибки возвращанных GetLastError, как показано в следующем коде образца.

LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, НЕДЕЙСТВИТЕЛЬНЫЙ, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // ЯЗЫК Умолчания (LPTSTR) &lpMsgBuf,
0,
НЕДЕЙСТВИТЕЛЬНЫЙ
);

// Отобразите строку.
MessageBox( НЕДЕЙСТВИТЕЛЬНЫЙ, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

// Свободный буфер.
LocalFree( lpMsgBuf );


В пределах текста сообщения, несколько последовательностей перехода поддерживаны чтобы динамически форматировать сообщение. Эти избегают последовательностей и их значения показаны в следующей таблице. Все избегают последовательностей начинать с процентов символа (%).

Значение Последовательности Перехода
%0 Завершает текстовую строку сообщения без конечного конца строки символа. Эта последовательность перехода может быть использована, чтобы строить длинные строки или, чтобы завершать само сообщение без конечного конца строки символа. Это полезное для быстрых сообщений.
%строка n!printf формата! Идентифицирует включаться. Величина n может быть в дипазоне 1 по 99. Строка формата printf (который должен быть заключен в скобки отметками восклицания), дополнительное и устанавливается по умолчанию, чтобы !s! если не определено.
Строка формата printf может содержать the * описатель для или точность или широтный компонент. Если * определен для одного компонента, функция FormatMessage использует включать %n+1; это использует %n+2 если * определен для обоих компонентов.
Плавающая-точка printf описатели формата U e, E, f, и g U не поддерживаны. Обход -, чтобы использовать функцию sprintf, чтобы форматировать плавающую точку номера во временный буфер затем использовать этот буфер как включать строку.


Любой другой nondigit символ, следующий за процентами символа отформатирован в выходном сообщении без процентов символа. Следующее является некоторыми примерами:

Строка Формата, проистекающая выходе %% единственные проценты подписываются в форматированном тексте сообщения.
%n прерывание жесткой линии когда строка формата происходит в конце строки. Эта строка формата полезная когда FormatMessage поставляет регулярные прерывания строки, так что сообщение устанавливается на определенной ширине.
%пространство пространство в форматированном тексте сообщения. Эта строка формата может быть использована, чтобы гарантировать подходящее количество конечных пробелов в текстовую строку сообщения.
%. Единственный период в форматированном тексте сообщения. Эта строка формата может быть использована, чтобы включать единственную точку в начале строки не завершая текстовое определение сообщения.
%! Единственный восклицательный знак в форматированном тексте сообщения. Эта строка формата может быть использована, чтобы включать восклицательный знак немедленно после включаться без своего ошибшееся для начала строки формата printf.


Смотри Также

LoadString, LocalFree


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz