Partager via


Trois types de pointeurs

MIDL prend en charge trois types de pointeurs pour prendre en charge un large éventail d’applications. Les trois niveaux différents sont appelés référence, uniques et pointeurs complets, et sont indiqués par les attributs [ref], [unique], et [ptr], respectivement. Les classes de pointeur décrites par ces attributs s’excluent mutuellement. Les attributs de pointeur peuvent être appliqués aux pointeurs dans les définitions de type, les types de retour de fonction, les paramètres de fonction, les membres de structures ou les unions ou les éléments de tableau.

Les pointeurs incorporés sont des pointeurs membres de structures ou d’unions. Ils peuvent également être des éléments de tableaux. Dans le [dans] direction, les pointeurs incorporés [ref] sont supposés pointer vers le stockage valide et ne doivent pas être null. Cette situation s’applique de manière récursive à n’importe quel [ref] pointeurs vers 2000. Dans le [in] direction, les incorporés [uniques] et les pointeurs complets (pointeurs avec l’attribut [ptr]) peuvent ou non être null.

Tout attribut pointeur placé sur un paramètre dans la syntaxe d’une déclaration de fonction affecte uniquement le déclarateur de pointeur le plus à droite pour ce paramètre. Pour affecter d’autres déclarateurs de pointeur, les types nommés intermédiaires doivent être utilisés.

Les fonctions qui retournent un pointeur peuvent avoir un attribut de pointeur en tant qu’attribut de fonction. Les attributs [uniques] et [ptr] doivent être appliqués aux types de retour de fonction. Les déclarations de membre qui sont des pointeurs peuvent spécifier un attribut de pointeur en tant qu’attribut de champ. Un attribut de pointeur peut également être appliqué en tant qu’attribut de type dans constructions typedef.

Lorsqu’aucun attribut de pointeur n’est spécifié en tant qu’attribut de champ ou de type, les attributs de pointeur sont appliqués conformément aux règles d’une déclaration de pointeur non attribuée comme suit.

En mode de compatibilité DCE, les attributs de pointeur sont déterminés dans le fichier IDL de définition. S’il existe un [pointer_default**]**attribut spécifié dans l’interface de définition, cet attribut est utilisé. Si aucun [pointer_default] attribut est présent, tous les pointeurs non attribués sont des pointeurs complets.

En mode Extensions Microsoft, les attributs de pointeur peuvent être déterminés en important des fichiers IDL et appliqués dans l’ordre suivant :

  1. Attribut de pointeur explicite appliqué au site d’utilisation.
  2. L’attribut [ref] lorsque le pointeur non attribué est un paramètre de pointeur de niveau supérieur.
  3. Attribut [pointer_default] spécifié dans l’interface de définition.
  4. Attribut [pointer_default] spécifié dans l’interface de base.
  5. Attribut [unique].

L’attribut d’interface [pointer_default] spécifie les attributs de pointeur par défaut à appliquer à un déclarateur de pointeur dans un type, un paramètre ou une déclaration de type de retour lorsque cette déclaration n’a pas d’attribut de pointeur explicite qui lui est appliqué. L’attribut d’interface [pointer_default] ne s’applique pas à un pointeur de niveau supérieur non attribué d’un paramètre, qui est supposé être [ref].