Attributs de tableau et de Sized-Pointer

MIDL fournit un ensemble complet de fonctionnalités pour passer des tableaux de données et des pointeurs vers des données. Vous pouvez utiliser ces attributs pour spécifier les caractéristiques des tableaux et de plusieurs niveaux de pointeurs.

Attribut Utilisation
size_is Spécifie la quantité de mémoire à allouer pour les pointeurs dimensionnés, les pointeurs dimensionnés vers les pointeurs dimensionnés et les tableaux uniques ou multidimensionnels.
max_is Valeur maximale pour un index de tableau.
length_is Nombre d’éléments de tableau à transmettre.
first_is Index du premier élément de tableau à transmettre.
last_is Donne l’index du dernier élément de tableau à transmettre.
String Indique que le tableau char, wchar_t, octets (ou équivalent) unidimensionnel ou le pointeur vers un tel tableau doit être géré en tant que chaîne.
Gamme Spécifie une plage de valeurs autorisées pour les arguments ou les champs dont les valeurs sont définies au moment de l’exécution.

 

MIDL prend en charge trois types de pointeurs : pointeurs de référence, pointeurs uniques et pointeurs complets. Ces pointeurs sont spécifiés par les attributs de pointeur ref, unique et ptr.

Un attribut pointeur peut être appliqué en tant qu’attribut de type ; en tant qu’attribut de champ qui s’applique à un membre de structure, à un membre d’union ou à un paramètre ; ou en tant qu’attribut de fonction qui s’applique au type de retour de fonction. L’attribut pointeur peut également apparaître avec le mot clé pointer_default.

Pour autoriser un paramètre pointeur à modifier la valeur pendant une fonction distante, vous devez fournir un autre niveau d’indirection en fournissant plusieurs déclarateurs de pointeur. L’attribut de pointeur explicite appliqué au paramètre affecte uniquement le déclarateur de pointeur le plus à droite pour le paramètre. Lorsqu’il existe plusieurs déclarateurs de pointeur dans une déclaration de paramètre, les autres déclarateurs utilisant par défaut l’attribut pointeur spécifié par l’attribut pointer_default . Pour appliquer différents attributs de pointeur à plusieurs déclarateurs de pointeurs, vous devez définir des types intermédiaires qui spécifient les attributs de pointeur explicites.

Valeurs de Pointer-Attribute par défaut

Lorsqu’aucun attribut de pointeur n’est associé à un pointeur qui est un paramètre, le pointeur est supposé être un pointeur ref .

Lorsqu’aucun attribut de pointeur n’est associé à un pointeur membre d’une structure ou d’une union, le compilateur MIDL affecte des attributs de pointeur à l’aide des règles de priorité suivantes (1 est le plus élevé) :

  1. Attributs explicitement appliqués au type de pointeur
  2. Attributs explicitement appliqués au paramètre ou au membre du pointeur
  3. Attribut pointer_default dans le fichier IDL qui définit le type
  4. Attribut pointer_default dans le fichier IDL qui importe le type
  5. ptr (mode osf); unique (mode Microsoft RPC par défaut)

Lorsque le fichier IDL est compilé en mode par défaut, les fichiers importés peuvent hériter des attributs de pointeur de l’importation de fichiers. Cette fonctionnalité n’est pas disponible lorsque vous compilez à l’aide du commutateur /osf . Pour plus d’informations, consultez importer.

Types de retour de fonction

Un pointeur retourné par une fonction doit être un pointeur unique ou un pointeur complet. Le compilateur MIDL signale une erreur si un résultat de fonction est un pointeur de référence, explicitement ou par défaut. Le pointeur retourné indique toujours un nouveau stockage.

Les fonctions qui retournent une valeur de pointeur peuvent spécifier un attribut pointeur en tant qu’attribut de fonction. Si aucun attribut pointeur n’est présent, le pointeur function-result utilise la valeur fournie comme attribut pointer_default .

Attributs de pointeur dans les définitions de type

Lorsque vous spécifiez un attribut pointeur au niveau supérieur d’une instruction typedef , l’attribut spécifié est appliqué au déclarateur de pointeur, comme prévu. Lorsqu’aucun attribut de pointeur n’est spécifié, les déclarateurs de pointeur au niveau supérieur d’une instruction typedef héritent du type d’attribut pointeur lorsqu’ils sont utilisés.

DCE IDL n’autorise pas l’application explicite du même attribut de pointeur deux fois, par exemple dans la déclaration typedef et la liste des attributs de paramètre. Lorsque vous utilisez le mode par défaut (extensions Microsoft) du compilateur MIDL, cette contrainte est assouplie.

Pour plus d’informations sur l’utilisation de tableaux et de pointeurs MIDL dans les appels de procédure distante, consultez Tableaux et pointeurs.