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

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

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

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

Синтаксис инструкций Описание:
MessageId=[numbernumber|+] Идентификатор сообщения. Эта инструкция является обязательной, хотя значение является необязательным. Если значение не указано, используется предыдущее значение для объекта, а также одно. Если значение указано со знаком "плюс", используется предыдущее значение для объекта, а также число после знака "плюс". Любое указанное значение должно соответствовать 16 битам. Дополнительные сведения о том, как значение сообщения формируется на основе серьезности, объекта и идентификатора сообщения, см. на схеме в Winerror.h. Этот файл заголовка определяет коды ошибок для системы.
Severity=name Одно из значений, заданное в заголовке SeverityNames. Этот оператор является необязательным. Если значение не указано, используется значение последнего, указанное для определения сообщения. Значение по умолчанию для первого определения сообщения — Severity=Success
Facility=name Одно из значений, указанных в файле FacilityNames в заголовке. Этот оператор является необязательным. Если значение не указано, используется значение последнего, указанное для определения сообщения. Значение по умолчанию для первого определения сообщения — Facility=Application
SymbolicName=name Связывает символьную константу C/C++ с кодом сообщения. Он используется в определении сообщения следующим образом: #define имя ((тип)0xnnnnnnnn)
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!]

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

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

%0

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

%.

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

%!

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

%%

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

%n

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

%b

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

%r

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