Trois types pointeur
MIDL prend en charge trois types de pointeurs pour s’adapter à un large éventail d’applications. Les trois niveaux différents sont appelés références, 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 d’unions, ou les éléments de tableau.
Les pointeurs incorporés sont des pointeurs qui sont membres de structures ou d’unions. Ils peuvent également être des éléments de tableaux. Dans le [ ] sens, les pointeurs [ Ref ] incorporés sont supposés pointer vers un stockage valide et ne doivent pas avoir la valeur null. Cette situation s’applique de manière récursive à tous les pointeurs de [ référence ] auxquels elles pointent. Dans le [ sens ] , les pointeurs [ uniques ] et complets incorporés (pointeurs avec l’attribut [ ptr ] ) peuvent ou ne peuvent pas être null.
Tout attribut de 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 comme attribut de fonction. Les attributs [ unique ] et [ ptr ] doivent être appliqués aux types de retour de fonction. Les déclarations de membres qui sont des pointeurs peuvent spécifier un attribut de pointeur comme attribut de champ. Un attribut de pointeur peut également être appliqué en tant qu’attribut de type dans les constructions typedef .
Quand aucun attribut de pointeur n’est spécifié en tant qu’attribut de champ ou de type, les attributs de pointeur sont appliqués selon les règles d’une déclaration de pointeur non attribute comme suit.
Dans le mode de compatibilité DCE, les attributs de pointeur sont déterminés dans le fichier IDL de définition. Si un [ attribut de pointeur _ par défautest ] spécifié dans l’interface de définition, cet attribut est utilisé. Si aucun attribut [ _ par ] défaut de pointeur n’est présent, tous les pointeurs non-attributs sont des pointeurs complets.
En mode extensions Microsoft, les attributs de pointeur peuvent être déterminés en important des fichiers IDL et sont appliqués dans l’ordre suivant :
- Attribut de pointeur explicite appliqué au site d’utilisation.
- Attribut [ Ref ] , lorsque le pointeur sans attribut est un paramètre de pointeur de niveau supérieur.
- Attribut [ _ par défaut ] de pointeur spécifié dans l’interface de définition.
- Attribut [ _ par défaut ] du pointeur spécifié dans l’interface de base.
- Attribut [ unique ] .
L' [ attribut d’interface _ par défaut du pointeur ] 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 appliqué. L’attribut d’interface [ _ par défaut ] du pointeur ne s’applique pas à un pointeur de niveau supérieur non attribut d’un paramètre, qui est supposé être [ Ref ].