Fichiers texte de message

Les messages sont définis dans un fichier texte de message. Le compilateur de messages affecte des nombres à chaque message et génère un fichier include C/C++ que l’application peut utiliser pour accéder à un message à l’aide d’une constante symbolique.

La syntaxe générale des instructions dans un fichier texte de message est la suivante :

= mot clé value

Les espaces autour du signe égal sont ignorés, et la valeur est délimitée par des espaces blancs (y compris les sauts de ligne) de la paire mot clé/valeur suivante. La casse est ignorée lors de la comparaison avec les noms de mot clé. La partie valeur peut être une constante entière numérique utilisant la syntaxe C/C++, un nom de symbole qui suit les règles des identificateurs C/C++, ou un nom de fichier avec 8 caractères ou moins, sans point.

Pour obtenir un exemple de fichier de message, consultez Exemple de fichier texte de message.

Commentaires

Les lignes de commentaire sont autorisées dans le fichier texte du message. Point-virgule (;) commence un commentaire qui se termine à la fin de la ligne. Suivez le point-virgule avec un indicateur de commentaire de ligne unique C/C++ (//) afin que le fichier d’en-tête généré par le compilateur de messages soit compilé dans votre application.

;// This is a single-line comment.

Pour un commentaire de bloc, commencez chaque ligne par un point-virgule, puis placez un indicateur de commentaire de bloc ouvert C/C++ (/*) après le point-virgule sur la première ligne et l’indicateur de commentaire de bloc de fermeture (*/) après le point-virgule de la dernière ligne.

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

Section d'en-tête

Le fichier texte du message contient un en-tête qui définit des noms et des identificateurs de langue à utiliser par les définitions de message dans le corps du fichier. L’en-tête contient zéro ou plusieurs des instructions suivantes.

Syntaxe d’instruction Description
MessageIdTypedef=type Type à utiliser dans la définition de message comme suit : nom #define ((type)0xnnnnnnnnnn)
Le type doit être suffisamment grand pour prendre en charge l’ensemble du code de message, tel qu’un DWORD. Le type peut également être un type défini dans le code source de l’application. La valeur par défaut du type est vide. Par conséquent, aucun cast de type n’est utilisé.
Cette instruction peut être spécifiée dans l’en-tête et aussi souvent que nécessaire dans la section définition du message.
SeverityNames=(name=number[:name]) Ensemble de noms autorisés pour la gravité dans une définition de message. Associé à chaque nom de gravité est un nombre qui, lorsqu’il est déplacé de 30 bits vers la gauche, donne le modèle de bits à logical-OR avec les valeurs d’installation et d’ID de message pour former le code du message. Toute valeur de gravité qui ne tient pas dans 2 bits est une erreur. Les codes de gravité peuvent également recevoir des noms symboliques. La valeur par défaut est définie comme suit : SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3)
FacilityNames=(name=number[:name]) Ensemble de noms autorisés pour les valeurs d’installation dans une définition de message. Associé à chaque nom d’installation est un nombre qui, lorsqu’il est déplacé de 16 bits vers la gauche, donne le modèle de bits à logical-OR avec les valeurs de gravité et d’ID de message pour former le code du message. Toute valeur d’installation qui ne tient pas dans 12 bits est une erreur. Cela permet d’obtenir des codes d’installation 4096 ; les 256 premiers codes sont réservés à l’utilisation du système. Les codes d’installation peuvent également recevoir des noms symboliques. La valeur par défaut est définie comme suit : FacilityNames=( System=0x0FF Application=0xFFF)
LanguageNames=(name=number:filename) Ensemble de noms autorisés pour les valeurs de langage dans une définition de message. Le nombre est utilisé comme identificateur de langue dans la table de ressources. Le fichier spécifié contient les messages de cette langue. Il s’agit généralement d’un fichier .bin généré par le compilateur de messages.
Un exemple de valeur est : LanguageNames=(English=0x409:MSG00409)
Pour obtenir la liste des identificateurs de langue, consultez https://go.microsoft.com/fwlink/p/?linkid=190280.
OutputBase=number Radix de sortie pour les constantes de message que le compilateur de messages écrit dans le fichier d’en-tête. Si elle est présente, cette valeur remplace le commutateur -d. Ce nombre peut être 10 (décimal) ou 16 (hexadécimal).

Définitions de message

Un fichier texte de message contient zéro ou plusieurs définitions de message après la section d’en-tête. Le tableau suivant décrit les instructions de définition de message. L’instruction MessageId marque le début de la définition du message. Les instructions Severity et Facility sont facultatives.

Syntaxe d’instruction Description
MessageId=[nombre|+] Identificateur du message. Cette instruction est obligatoire, bien que la valeur soit facultative. Si aucune valeur n’est spécifiée, la valeur utilisée est la valeur précédente de l’installation, plus une. Si la valeur est spécifiée avec un signe plus, la valeur utilisée est la valeur précédente de l’installation, plus le nombre après le signe plus. Toute valeur spécifiée doit tenir dans 16 bits. Pour plus d’informations sur la façon dont la valeur du message est formée à partir de la gravité, de la facilité et de l’ID de message, consultez le diagramme dans Winerror.h. Ce fichier d’en-tête définit les codes d’erreur pour le système.
Severity=name Une des valeurs spécifiées par SeverityNames dans l’en-tête. Cette instruction est facultative. Si aucune valeur n’est spécifiée, la valeur utilisée est la dernière valeur spécifiée pour une définition de message. La valeur par défaut pour la première définition de message est Severity=Success
Facility=name Une des valeurs spécifiées par FacilityNames dans l’en-tête. Cette instruction est facultative. Si aucune valeur n’est spécifiée, la valeur utilisée est la dernière valeur spécifiée pour une définition de message. La valeur par défaut pour la première définition de message est Facility=Application
SymbolicName=name Associe une constante symbolique C/C++ au code du message. Il est utilisé dans la définition du message comme suit : nom #define ((type)0xnnnnnnnn)
OutputBase={number} Radix de sortie pour les constantes de message que le compilateur de messages écrit dans le fichier d’en-tête. Si elle est présente, cette valeur remplace le commutateur -d. Ce nombre peut être 10 (décimal) ou 16 (hexadécimal).
Language=name Une des valeurs spécifiées par LanguageNames dans l’en-tête. Cette instruction est facultative. Si aucune valeur n’est spécifiée, la valeur utilisée est la dernière valeur spécifiée pour une définition de message. La valeur par défaut de la première définition de message est la suivante : Language=English
texte du message Texte du message. Il est inclus dans le fichier binaire de message. Il est également inclus dans le fichier d’en-tête dans le bloc de commentaires qui précède directement la définition du message.
. Le texte du message est terminé par une nouvelle ligne contenant un point unique au début de la ligne.

Si la définition du message inclut le texte du message pour plusieurs langues, chaque langue nécessite sa propre instruction Language, son propre texte de message et la fin d’une nouvelle ligne avec un point. Exemple :

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>
.

Vous pouvez spécifier les séquences d’échappement suivantes pour la mise en forme du texte du message à utiliser par l’observateur d’événements ou votre application. Le signe pourcentage (%) commence toutes les séquences d’échappement. Tout autre caractère suivant un signe de pourcentage s’affiche sans le signe de pourcentage.

%n[! format_specifier!]

Décrit une insertion. Chaque insertion est une entrée dans le tableau Arguments de la fonction FormatMessage . La valeur de n peut être un nombre compris entre 1 et 99. Le spécificateur de format est facultatif. Si aucune valeur n’est spécifiée, la valeur par défaut est !s!. Pour plus d’informations sur le spécificateur de format, consultez wsprintf.

Le spécificateur de format peut utiliser * pour la précision ou la largeur. Lorsqu’elles sont spécifiées, elles consomment les insertions numérotées n+1 et n+2.

%0

Termine une ligne de texte de message sans caractère de nouvelle ligne de fin. Cela peut être utilisé pour créer une longue ligne ou mettre fin à un message d’invite sans caractère de nouvelle ligne de fin.

%.

Génère un point unique. Vous pouvez l’utiliser pour afficher un point au début d’une ligne, ce qui, sinon, arrêterait le texte du message.

%!

Génère un point d’exclamation unique. Cela peut être utilisé pour spécifier un point d’exclamation immédiatement après une insertion.

%%

Génère un signe de pourcentage unique.

%n

Génère un saut de ligne rigide lorsqu’il se produit à la fin d’une ligne. Cela peut être utilisé avec FormatMessage pour garantir que le message s’adapte à une certaine largeur.

%b

Génère un caractère d’espace. Cela peut être utilisé pour garantir un nombre approprié d’espaces de fin sur une ligne.

%r

Génère un retour chariot en dur sans caractère de nouvelle ligne de fin.