Текстовые файлы сообщений
Сообщения определяются в текстовом файле сообщения. Компилятор сообщений назначает номера каждому сообщению и создает файл включения 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
-
Создает жесткий возврат каретки без символа новой строки.