Текстовые файлы сообщений

Сообщения определяются в текстовом файле сообщения. Компилятор сообщений присваивает каждому сообщению номера и создает файл включения C/C++, который приложение может использовать для доступа к сообщению с помощью символьной константы.

Общий синтаксис для операторов в текстовом файле сообщения выглядит следующим образом:

= ключевое слово значение

Пробелы вокруг знака равенства игнорируются, а значение разделяется пробелами (включая разрывы строк) из следующей пары ключевое слово/значение. Регистр игнорируется при сравнении с именами ключевое слово. Часть значения может быть числовой целочисленной константой с использованием синтаксиса C/C++, именем символа, соответствующим правилам для идентификаторов C/C++, или именем файла с 8 символами или меньше, без точек.

Пример файла сообщения см. в разделе Пример текстового файла сообщения.

Комментарии

Строки комментариев разрешены в текстовом файле сообщения. Точка с запятой (;) начинает комментарий, заканчивающийся в конце строки. Следуйте за точкой с запятой с индикатором C/C++ с одним строковый комментарий (//), чтобы файл заголовка, созданный компилятором сообщений, скомпилировался в приложении.

;// This is a single-line comment.

Для комментария к блоку начните каждую строку с точки с запятой, а затем поместите индикатор открытого комментария блока C/C++ (/*) после точки с запятой в первой строке и индикатор комментария к блоку закрытия (*/) после точки с запятой в последней строке.

;/* This is a block comment.
;   It spans multiple lines.
;*/

Раздел заголовка

Текстовый файл сообщения содержит заголовок, определяющий имена и идентификаторы языка для использования определениями сообщений в тексте файла. Заголовок содержит ноль или более следующих инструкций.

Синтаксис инструкции Описание
MessageIdTypedef=type Введите в определении сообщения следующим образом: #define name ((type)0xnnnnnnnnnn)
Тип должен быть достаточно большим, чтобы вместить весь код сообщения, например DWORD. Тип также может быть типом, определенным в исходном коде приложения. Значение по умолчанию для типа пусто, поэтому приведение типов не используется.
Эту инструкцию можно указать в заголовке и при необходимости в разделе определения сообщения.
SeverityNames=(name=number[:name]) Набор имен, разрешенных для серьезности в определении сообщения. С каждым именем серьезности связано число, которое при смещении влево на 30 бит дает шаблон бита к логическому ИЛИ со значениями средства и идентификатора сообщения для формирования кода сообщения. Любое значение серьезности, которое не помещается в 2 бита, является ошибкой. Коды серьезности также могут быть присвоены символьные имена. Значение по умолчанию определяется следующим образом: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3).
FacilityNames=(name=number[:name]) Набор имен, разрешенных для значений объектов в определении сообщения. С каждым именем средства связано число, которое при смещении влево на 16 бит дает шаблон бита логическому или со значениями серьезности и идентификатора сообщения для формирования кода сообщения. Любое значение объекта, которое не помещается в 12 бит, является ошибкой. Это позволяет использовать коды объектов 4096; первые 256 кодов зарезервированы для использования системой. Коды объектов также могут быть присвоены символьные имена. Значение по умолчанию определяется следующим образом: FacilityNames=( System=0x0FF Application=0xFFF)
LanguageNames=(name=number:filename) Набор имен, допустимых для языковых значений в определении сообщения. Число используется в качестве идентификатора языка в таблице ресурсов. Указанный файл содержит сообщения для этого языка. Обычно это BIN-файл, созданный компилятором сообщений.
Пример значения: LanguageNames=(English=0x409:MSG00409)
Список идентификаторов языка см. в разделе https://go.microsoft.com/fwlink/p/?linkid=190280.
OutputBase=number Выходной радикс для констант сообщений, которые компилятор сообщений записывает в файл заголовка. Если оно имеется, это значение переопределяет параметр -d. Это число может быть 10 (десятичное) или 16 (шестнадцатеричное).

Определения сообщений

Текстовый файл сообщения содержит ноль или более определений сообщений после раздела заголовка. В следующей таблице описаны инструкции определения сообщений. Оператор MessageId помечает начало определения сообщения. Операторы Severity и Facility являются необязательными.

Синтаксис инструкции Описание
MessageId=[число]|+ Идентификатор сообщения. Эта инструкция является обязательной, хотя значение является необязательным. Если значение не указано, используется предыдущее значение для объекта плюс одно. Если значение указано со знаком "плюс", то используется предыдущее значение объекта, а также число после знака "плюс". Любое указанное значение должно соответствовать 16 битам. Дополнительные сведения о том, как значение сообщения формируется на основе серьезности, объекта и идентификатора сообщения, см. на схеме в Winerror.h. Этот файл заголовка определяет коды ошибок для системы.
Severity=name Одно из значений, указанных в заголовке SeverityNames. Этот оператор является необязательным. Если значение не указано, используется значение, последнее указанное для определения сообщения. По умолчанию для первого определения сообщения используется значение Severity=Success
Facility=name Одно из значений, указанных в заголовке FacilityNames. Этот оператор является необязательным. Если значение не указано, используется значение, последнее указанное для определения сообщения. По умолчанию для первого определения сообщения используется значение Facility=Application
SymbolicName=name Связывает символьную константу C/C++ с кодом сообщения. Он используется в определении сообщения следующим образом: #define name ((type)0xnnnnnnnnnn)
OutputBase={number} Выходной радикс для констант сообщения, который компилятор сообщения записывает в файл заголовка. Если оно имеется, это значение переопределяет параметр -d. Это число может быть 10 (десятичное) или 16 (шестнадцатеричное).
Language=name Одно из значений, указанных languageNames в заголовке . Этот оператор является необязательным. Если значение не указано, используется значение, последнее указанное для определения сообщения. По умолчанию для первого определения сообщения используется следующее: Language=English
текст сообщения Текст сообщения. Он включается в двоичный файл сообщения. Он также включается в файл заголовка в блоке комментариев, который непосредственно предшествует определению сообщения.
. Текст сообщения завершается новой строкой, содержащей одну точку в начале строки.

Если определение сообщения содержит текст сообщения на нескольких языках, для каждого языка требуется собственная инструкция Language, текст сообщения и завершающая новая строка с точкой. Пример:

MessageId=0x1
Severity=Error
Facility=Runtime
SymbolicName=MSG_BAD_COMMAND
Language=English
You have chosen an incorrect command.
.

Language=Japanese
<Japanese message string goes here>
.

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

%n[! format_specifier!]

Описывает вставку. Каждая вставка является записью в массиве Arguments в функции FormatMessage . Значение n может быть числом от 1 до 99. Описатель формата является необязательным. Если значение не указано, по умолчанию используется значение !s!. Сведения о спецификаторе формата см. в разделе wsprintf.

Описатель формата может использовать * для точности или ширины. При указании они используют вставки n+1 и n+2.

%0

Завершает текстовую строку сообщения без символа новой строки в конце. Это можно использовать для построения длинной строки или завершения сообщения запроса без символа новой строки.

%.

Создает одну точку. Это можно использовать для отображения точки в начале строки, которая в противном случае завершает текст сообщения.

%!

Создает один восклицательный знак. Его можно использовать для указания восклицательного знака сразу после вставки.

%%

Создает единый знак процента.

%n

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

%b

Создает символ пробела. Это можно использовать для обеспечения соответствующего количества конечных пробелов в строке.

%r

Создает возврат жесткой каретки без символа новой строки в конце.