pragma (attribut)

La directive #pragma midl_echo indique à MIDL d’émettre la chaîne spécifiée, sans les guillemets, dans le fichier d’en-tête généré.

#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )

Paramètres

string

Spécifie une chaîne insérée dans le fichier d’en-tête généré. Les guillemets sont supprimés pendant le processus d’insertion.

séquence de jetons

Spécifie une séquence de jetons qui sont insérés dans le fichier d’en-tête généré dans le cadre d’une directive #pragma sans traitement par le compilateur MIDL.

n

Spécifie la taille actuelle du pack. Les valeurs valides sont 1, 2, 4, 8 et 16.

id

Spécifie l’identificateur de l’utilisateur.

Notes

Les directives de prétraitement en langage C qui apparaissent dans le fichier IDL sont traitées par le préprocesseur du compilateur C. Les directives #define dans le fichier IDL sont disponibles pendant la compilation MIDL, mais pas pour le compilateur C.

Par exemple, lorsque le préprocesseur rencontre la directive « #define WINDOWS 4 », le préprocesseur remplace toutes les occurrences de « WINDOWS » dans le fichier IDL par « 4 ». Le symbole « WINDOWS » n’est pas disponible au moment de la compilation C.

Pour permettre aux définitions de macro du préprocesseur C de passer le compilateur MIDL au compilateur C, utilisez la directive #pragma midl_echo ou cpp_quote . Ces directives indiquent au compilateur MIDL de générer un fichier d’en-tête qui contient la chaîne de paramètre avec les guillemets supprimés. Les directives #pragma midl_echo et cpp_quote sont équivalentes.

La directive #pragma pack est utilisée par le compilateur MIDL pour contrôler l’empaquetage des structures. Il remplace le commutateur de ligne de commande /Zp . L’option pack (n) définit la taille actuelle du pack sur une valeur spécifique : 1, 2, 4, 8 ou 16. Les options pack (push) et pack (pop) présentent les caractéristiques suivantes :

  • Le compilateur gère une pile de compression. Les éléments de la pile d’empaquetage incluent une taille de pack et un ID facultatif. La pile est limitée uniquement par la mémoire disponible avec la taille actuelle du pack en haut de la pile.
  • Les résultats de l’empaquetage (push) entraînent l’envoi (push) de la taille actuelle du pack sur la pile d’emballage. La pile est limitée par la mémoire disponible.
  • Pack (push,n) est identique à pack (push) suivi de pack (n).
  • Pack (push, id) envoie également l’id dans la pile d’emballage, ainsi que la taille du pack.
  • Pack (push, id, n) est identique à pack (push, id) suivi de pack (n).
  • L’empaquetage (pop) entraîne le fait de faire éclater la pile d’emballage. Les fenêtres contextuelles déséquilibrées provoquent des avertissements et définissent la taille de pack actuelle sur la valeur de ligne de commande.
  • Si pack (pop, id, n) est spécifié, n est ignoré.

Le compilateur MIDL place les chaînes spécifiées dans les directives \cpp_quote et pragma dans le fichier d’en-tête dans la séquence dans laquelle elles sont spécifiées dans le fichier IDL et par rapport aux autres composants d’interface dans le fichier IDL. Les chaînes doivent généralement apparaître dans la section corps de l’interface du fichier IDL après toutes les opérations d’importation .

Le compilateur MIDL ne tente pas de traiter #pragma directives qui ne commencent pas par le préfixe « midl_ ». D’autres directives #pragma dans le fichier IDL sont passées dans le fichier d’en-tête généré sans modification.

Exemples

/* IDL file */ 
#pragma midl_echo("#define UNICODE") 
cpp_quote("#define __DELAYED_PREPROCESSING__ 1") 
#pragma hdrstop 
#pragma check_pointer(on) 
 
/* generated header file */ 
#define UNICODE 
#define __DELAYED_PREPROCESSING__ 1 
#pragma hdrstop 
#pragma check_pointer(on)

Voir aussi

cpp_quote

Fichier de définition d’interface (IDL)

Importation

/Zp