Partager via


Compilateur de messages (MC.exe)

Le compilateur de messages (mc.exe) est utilisé pour compiler des manifestes d’instrumentation et des fichiers texte de message. Le compilateur génère les fichiers de ressources de message auxquels votre application est liée.

MC [-?aAbcdnouUv] [-m <length>] [-h <path>] [-e <extension>] [-r <path>]
   [-x <path>] [-w <file>] [-W <file>] [-z <basename> ] [-cp <encoding>]
   [-km | -um | -generateProjections | -cs <namespace>]
   [-mof] [-p <prefix>] [-P <prefix>]
   [<filename.man>] [<filename.mc>]

Note

Le compilateur de messages est fourni avec le Kit de développement logiciel (SDK) Windows et se trouve dans le dossier \Bin.

Arguments communs aux fichiers texte de message et aux fichiers manifestes

- ?

Affiche les informations d’utilisation du compilateur de messages.

-c

Utilisez cet argument pour que le compilateur définisse le bit client (bit 28) dans tous les ID de message. Pour plus d’informations sur le bit du client, consultez winerror.h.

-cpencodage

Utilisez cet argument pour spécifier l’encodage de caractères utilisé pour tous les fichiers texte générés. Les noms valides incluent « ansi » (valeur par défaut), « utf-8 » et « utf-16 ». Les encodages Unicode ajoutent une marque d’ordre d’octet.

-eextension

Utilisez cet argument pour spécifier l’extension à utiliser pour le fichier d’en-tête. Vous pouvez spécifier jusqu’à trois caractères d’extension, sans inclure la période. La valeur par défaut est .h.

-hchemin d’accès

Utilisez cet argument pour spécifier le dossier dans lequel vous souhaitez que le compilateur place le fichier d’en-tête généré. La valeur par défaut est le répertoire actif.

-mlongueur

Utilisez cet argument pour que le compilateur génère un avertissement si le message dépasse longueur caractères.

-rchemin d’accès

Utilisez cet argument pour spécifier le dossier dans lequel vous souhaitez que le compilateur place le script du compilateur de ressources généré (fichier.rc) et les fichiers .bin générés (ressources binaires) inclus dans le script du compilateur de ressources. La valeur par défaut est le répertoire actif.

-znom

Utilisez cet argument pour remplacer le nom de base par défaut utilisé par le compilateur pour les fichiers qu’il génère. La valeur par défaut consiste à utiliser le nom de base du nom de fichier fichier d’entrée.

nom de fichier

Fichier manifeste d’instrumentation ou fichier texte de message. Le fichier doit exister dans le répertoire actif. Vous pouvez spécifier un fichier manifeste, un fichier texte de message ou les deux. Le nom de fichier doit inclure l’extension. La convention consiste à utiliser une extension .man pour les fichiers manifestes et une extension .mc pour les fichiers texte de message.

Arguments spécifiques aux fichiers manifestes

-schemin d’accès

Utilisez cet argument pour créer une base de référence de votre instrumentation. Spécifiez le chemin d’accès au dossier qui contient vos fichiers manifeste de base. Pour les versions ultérieures, vous devez ensuite utiliser l’argument -t pour vérifier le nouveau manifeste par rapport à la base de référence pour les problèmes de compatibilité.

avant MC version 1.12.7051 : Non disponible

-tchemin d’accès

Utilisez cet argument lorsque vous créez une nouvelle version de votre manifeste et souhaitez la vérifier pour la compatibilité des applications par rapport à la base de référence que vous avez créée à l’aide de l’argument -s. Le chemin d’accès doit pointer vers le dossier qui contient le . Fichiers BIN créés par l’opération de base de référence (voir le commutateur -s).

avant MC version 1.12.7051 : Non disponible

-wchemin d’accès

Le compilateur ignore cet argument et valide automatiquement le manifeste.

Avant MC version 1.12.7051 : Utilisez cet argument pour spécifier le dossier qui contient le fichier de schéma Eventman.xsd, que le compilateur utilise pour valider votre manifeste. Le Kit de développement logiciel (SDK) Windows inclut le fichier de schéma Eventman.xsd dans le dossier \Include. Si vous ne spécifiez pas cet argument, le compilateur ne valide pas votre manifeste.

-Wchemin d’accès

Le compilateur ignore cet argument.

Avant MC version 1.12.7051 : Utilisez cet argument pour spécifier le dossier qui contient le fichier Winmeta.xml. Le fichier Winmeta.xml contient les types d’entrée et de sortie reconnus ainsi que les canaux, niveaux et opcodes prédéfinis. Le Kit de développement logiciel (SDK) Windows inclut le fichier Winmeta.xml dans le dossier \Include.

Arguments spécifiques à la génération de code que votre fournisseur utiliserait pour journaliser les événements

Vous pouvez utiliser les arguments du compilateur suivants pour générer le code en mode noyau ou en mode utilisateur que vous pouvez utiliser pour journaliser les événements. Vous pouvez également demander au compilateur de générer du code pour prendre en charge l’écriture d’événements sur des ordinateurs avant Windows Vista. Si votre application est écrite C#, le compilateur peut générer une classe C# que vous pouvez utiliser pour journaliser les événements. Ces arguments sont disponibles à partir de la version MC version 1.12.7051 fournie avec la version windows 7 du Kit de développement logiciel (SDK) Windows.

-co

Utilisez cet argument pour que le service de journalisation appelle votre fonction définie par l’utilisateur pour chaque événement que vous journalisez (la fonction est appelée après la journalisation de l’événement). Votre fonction définie par l’utilisateur doit avoir la signature suivante.

VOID
pFnUserFunction(
    __in REGHANDLE RegHandle,
    __in PCEVENT_DESCRIPTOR Descriptor,
    __in ULONG EventDataCount,
    __in_ecount(EventDataCount) PEVENT_DATA_DESCRIPTOR EventData
    );

Vous devez également inclure la directive suivante dans votre code.

#define MCGEN_CALLOUT pFnUserFunction

Vous devez conserver votre implémentation aussi courte que possible pour éviter les problèmes de journalisation ; le service ne journalira plus vos événements tant que la fonction n’est pas retournée.

Vous pouvez utiliser cet argument avec l’argument -km ou -um.

-csespace de noms

Utilisez cet argument pour que le compilateur génère une classe C# basée sur la classe .NET 3.5 EventProvider.

-cssespace de noms

Utilisez cet argument pour que le compilateur génère une classe C# statique basée sur la classe .NET 3.5 EventProvider.

-km

Utilisez cet argument pour que le compilateur génère le code en mode noyau que vous utiliseriez pour consigner les événements définis dans votre manifeste.

-mof

OBSOLESCENT. Utilisez cet argument pour que le compilateur génère du code que vous pouvez utiliser pour journaliser des événements sur des ordinateurs avant Windows Vista. Cette option crée également un fichier MOF qui contient les classes MOF pour chaque événement défini dans le manifeste. Pour inscrire les classes dans le fichier MOF afin que les consommateurs puissent décoder les événements, utilisez le compilateur MOF (Mofcomp.exe). Pour plus d’informations sur l’utilisation du compilateur MOF, consultez format d’objet managé.

Pour utiliser ce commutateur, vous devez respecter les restrictions suivantes :

  • Chaque définition d’événement doit inclure les attributs de tâche et d’opcode
  • Chaque tâche doit inclure l’attribut eventGuid
  • Les données de modèle que l’événement référence ne peuvent pas contenir :
    • Éléments de données qui spécifient les types d’entrée win :Binary ou win :SYSTEMTIME
    • Structures
    • Tableaux de taille variable ; toutefois, vous pouvez spécifier des tableaux de longueur fixe
    • Les types de données de chaîne ne peuvent pas spécifier l’attribut de longueur

Vous devez utiliser cet argument avec l’argument -um, -cs, -cssou -km argument

-ppréfixe

Utilisez cet argument pour remplacer le préfixe par défaut utilisé par le compilateur pour les noms de macros de journalisation et les noms de méthode. Le préfixe par défaut est « EventWrite ». La chaîne respecte la casse.

Vous pouvez utiliser cet argument avec l’argument -um, -cs, -cssou -km argument.

-Ppréfixe

Utilisez cet argument pour supprimer les caractères du début du nom symbolique que vous avez spécifié pour l’événement. La comparaison ne respecte pas la casse. Le compilateur utilise le nom symbolique pour former les noms de macros de journalisation et les noms de méthode.

Le nom par défaut d’une macro de journalisation est EventWriteSymbolName, où SymbolName est le nom symbolique que vous avez spécifié pour l’événement. Par exemple, si vous définissez l’attribut de symbole de l’événement sur PrinterConnection, le nom de la macro est EventWritePrinterConnection. Pour supprimer l’imprimante du nom, utilisez -PPrinter, ce qui entraîne EventWriteConnection.

Vous pouvez utiliser cet argument avec l’argument -um, -cs, -cssou -km argument.

-um

Utilisez cet argument pour que le compilateur génère le code en mode utilisateur que vous utiliseriez pour consigner les événements définis dans votre manifeste.

Pour que le compilateur génère du code de journalisation, vous devez spécifier l’argument -um, -cs, -cssou -km ; ces arguments s’excluent mutuellement.

Pour spécifier où placer les fichiers .h, .cs et .mof générés par le compilateur, utilisez l’argument -h. Si vous ne spécifiez pas l’argument -h, les fichiers sont placés dans le dossier actif.

Pour spécifier où placer le fichier .rc et les fichiers binaires (qui contiennent les ressources de métadonnées) générés par le compilateur, utilisez l’argument -r. Si vous ne spécifiez pas l’argument -r, les fichiers sont placés dans le dossier actif.

Le compilateur utilise le nom de base du fichier d’entrée comme nom de base des fichiers qu’il génère. Pour spécifier un nom de base, utilisez l’argument -z.

Arguments spécifiques aux fichiers texte de message

-a

Utilisez cet argument pour spécifier que le nom de fichier fichier d’entrée contient du contenu dans la page de codes ANSI Windows par défaut (CP_ACP). Il s’agit de la valeur par défaut. Utilisez -u pour Unicode. Si le fichier d’entrée contient un boM, cet argument est ignoré.

-A

OBSOLESCENT. Utilisez cet argument pour spécifier que les messages dans le fichier de sortie .bin doivent être ANSI.

-b

Utilisez cet argument pour que le compilateur utilise le nom de base du nom de fichier fichier d’entrée pour les noms de fichiers .bin. La valeur par défaut consiste à utiliser « MSG ».

-d

Utilisez cet argument pour utiliser des valeurs décimales pour les constantes Gravité et Installation dans le fichier d’en-tête au lieu de valeurs hexadécimales.

-n

Utilisez cet argument pour spécifier que les messages se terminent immédiatement après le corps du message. La valeur par défaut consiste à mettre fin au corps du message avec un CR/LF.

-o

Utilisez cet argument pour que le compilateur génère un fichier d’en-tête OLE2 à l’aide de HRESULT définitions au lieu des codes d’état. L’utilisation de codes d’état est la valeur par défaut.

-u

Utilisez cet argument pour spécifier que le fichier d’entrée nom de fichier contient du contenu UTF-16LE. La valeur par défaut est le contenu ANSI. Si le fichier d’entrée contient un boM, cet argument est ignoré.

-U

Utilisez cet argument pour spécifier que les messages dans le fichier de sortie .bin doivent être Unicode. Il s’agit de la valeur par défaut.

-v

Utilisez cet argument pour générer une sortie détaillée.

-xchemin d’accès

Utilisez cet argument pour spécifier le dossier dans lequel vous souhaitez que le compilateur place le fichier include .dbg C. Le fichier .dbg mappe les ID de message à leurs noms symboliques.

Remarques

Les arguments -A et -mof sont déconseillés et seront supprimés ultérieurement.

Le compilateur accepte comme entrée un fichier manifeste (.man) ou un fichier texte de message (.mc) et génère les fichiers suivants :

  • nom de fichier.h

    Fichier d’en-tête C/C++ qui contient les descripteurs d’événements, le GUID du fournisseur et les noms de symboles que vous référencez dans votre application.

  • nom de fichierTEMP.bin

    Fichier de ressources binaire qui contient les métadonnées du fournisseur et des événements. Il s’agit de la ressource de modèle, qui est indiquée par le suffixe TEMP du nom de base du fichier.

  • Msg00001.bin

    Fichier de ressources binaire pour chaque langue que vous spécifiez (par exemple, si votre manifeste contient des chaînes de message dans en-US et fr-FR, le compilateur génère Msg00001.bin et Msg00002.bin).

  • nom de fichier.rc

    Script du compilateur de ressources qui contient les instructions permettant d’inclure chaque fichier .bin en tant que ressource.

Pour les arguments qui prennent un chemin, le chemin d’accès peut être un chemin absolu, relatif ou UNC et il peut contenir des variables d’environnement.

Avant MC version 1.12.7051 : le compilateur n’autorise pas les chemins relatifs ou les variables d’environnement.

Exemples

L’exemple suivant compile un manifeste à l’aide des valeurs par défaut du compilateur.

mc spooler.man

L’exemple suivant compile le manifeste et place les fichiers d’en-tête et de ressources dans les dossiers spécifiés.

mc -h <pathgoeshere> -r <pathgoeshere> spooler.man

Exigences

Exigence Valeur
Client minimum pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimum pris en charge Windows 2000 Server [applications de bureau uniquement]