attribut de plage
L’attribut [ Range ] vous permet de spécifier une plage de valeurs autorisées pour les arguments ou les champs dont les valeurs sont définies au moment de l’exécution. Lorsqu’il est utilisé avec un type de canal, l’attribut spécifie la plage autorisée pour le nombre d’éléments dans les segments de canal.
[range(low-val,high-val)] type-specifier declarator
Paramètres
-
faible Val
-
Valeur autorisée la plus basse que le paramètre ou le champ peut contenir.
-
haute-Val
-
Valeur autorisée la plus élevée que le paramètre ou le champ peut contenir.
-
spécificateur de type
-
Type intégral autre que hyper ou _ _ Int64, un identificateur de type à un type intégral, un type enum ou un nom de type de canal.
-
declarator
-
Déclarateur C standard, tel qu’un identificateur.
Notes
Utilisez l’attribut [ Range ] pour modifier la signification des paramètres ou des champs sensibles, tels que ceux utilisés pour la taille ou la longueur, avec des tableaux conformes ou variables, ou chaque fois que vous souhaitez vérifier un paramètre ou une valeur de champ par rapport à une plage de valeurs valides. L’attribut s’applique aux paramètres de niveau supérieur, ainsi qu’aux paramètres et champs de niveau inférieur. L’ajout de l’attribut de [ plage ] à un type ne change pas son format de câble, donc n’affecte pas la compatibilité descendante.
L’attribut [ Range ] peut également être utilisé sur des données conformes, telles que des mémoires tampons ou des tableaux, avec un attribut de conformité. L’effet est de limiter toutes les tailles de conformité pour les données conformes à la plage spécifiée. Si les données conformes sont un tableau multidimensionnel, chaque dimension de tableau est limitée à la plage spécifiée.
L’utilisation de [ Range ] sur des données conformes nécessite que la cible de compilation soit â «Target nt60 ou version ultérieure.
Notez que vous devez utiliser l’option du compilateur /Robust quand vous compilez votre fichier IDL afin de générer le code stub qui effectuera ces vérifications. Sans le commutateur /Robust , le compilateur MIDL ignore cet attribut.
Exemples
HRESULT Method1(
[in, range(0,100)] ULONG m,
[in, range(0,100)] ULONG n,
[size_is(m,n)] ULONG **pplong);
void InPipe(
[in, range(0, MAX_CHUNK) LONG_PIPE pipe_date);