Méthode IPropertyDescription ::CoerceToCanonicalValue (propsys.h)
Force la valeur à la valeur canonique, en fonction de la description de la propriété.
Syntaxe
HRESULT CoerceToCanonicalValue(
[in, out] PROPVARIANT *ppropvar
);
Paramètres
[in, out] ppropvar
Type : PROPVARIANT*
Lors de l’entrée, contient un pointeur vers une structure PROPVARIANT qui contient la valeur d’origine. Lorsque cette méthode retourne, contient la valeur canonique.
Valeur retournée
Type : HRESULT
Si le code d’échec n’est pas INPLACE_S_TRUNCATED ou E_INVALIDARG, la contrainte du type de la valeur vers le type de la description de la propriété n’a pas été possible et la structure PROPVARIANT a été effacée.
Les résultats possibles sont les suivants :
Code de retour | Description |
---|---|
|
La fonction a réussi. La valeur de propriété spécifiée par ppropvar est désormais sous forme canonique. |
|
La valeur de propriété spécifiée par ppropvar est désormais sous une forme canonique tronquée. |
|
Le paramètre ppropvar n’est pas valide. La structure PROPVARIANT a été effacée. |
Remarques
Pour plus d’informations, consultez l’attribut de type de l’élément typeInfo dans le fichier .propdesc de la propriété.
La plupart des descriptions de propriétés spécifient le type que leurs valeurs sont censées utiliser. Par exemple, la description de la propriété pour System.Title spécifie que les valeurs System.Title doivent utiliser VT_LPWSTR
. Cette méthode force les valeurs à ce type et force le résultat dans une forme canonique.
Il est important de noter que si cette méthode échoue, elle aura déjà appelé propVariantClear sur la structure PROPVARIANT d’entrée . Ce n’est que si cette méthode réussit que l’application appelante est responsable de l’appel du PropVariantClear sur ppropvar lorsque la structure n’est plus nécessaire.
La contrainte effectuée par cette méthode est également effectuée par le système de propriétés lors des appels IPropertyStore ::GetValue et IPropertyStore ::SetValue . Les applications peuvent dépendre du système de propriété pour effectuer les contraintes, ou utiliser cette méthode pour effectuer la contrainte au moment de leur choix.
La contrainte est effectuée en quatre étapes, comme suit :
- Les valeurs suivantes sont converties
VT_EMPTY
en .- Valeurs de type
VT_NULL
. - Valeurs de type
VT_LPWSTR, VT_BSTR
, ouVT_LPSTR
dont le pointeur est NULL. - Valeurs de type
VT_LPWSTR, VT_BSTR
, ouVT_LPSTR
qui sont vides ou se composent entièrement d’espaces. - Valeurs de type
VT_FILETIME
antérieures à minuit 1601/01/02.
- Valeurs de type
- Si la valeur n’est pas de type
VT_EMPTY
après l’étape 1, elle est convertie en type spécifié par la description de la propriété. Le type d’une description de propriété peut être obtenu à l’aide de IPropertyDescription ::GetPropertyType. Pour plus d’informations sur la façon dont le schéma de propriété influence le type d’une description de propriété, consultez typeInfo . Les conversions sont effectuées comme suit :- Les valeurs de type
VT_LPWSTR, VT_BSTR
ouVT_LPSTR
sont converties enVT_VECTOR | VT_LPWSTR
initPropVariantFromStringAsVector. - Toutes les autres conversions sont effectuées à l’aide de PropVariantChangeType
- Les valeurs de type
- Après les étapes 2 et 3, la valeur est convertie sous forme canonique en fonction de son type. Les formes canoniques sont résumées dans le tableau suivant.
Type de valeur Forme canonique VT_EMPTY
Toujours canonique. VT_LPWSTR
- Aucun espace de début ou de fin. La chaîne n’est pas vide. La chaîne n’est pas NULL. Par exemple :
L"Alice"
. - S’il s’agit d’une propriété d’arborescence (autrement dit, si l’attribut de
isTreeProperty
l’élément typeInfo est TRUE), il ne doit pas avoir de barres obliques de début ou de fin (/), ne doit pas avoir d’espaces entre le texte et les barres obliques, et ne doit pas avoir deux barres obliques(/) consécutives. Par exemple :L"Friend/Bob"
- La contrainte supprime les caractères inutiles et entraîne l’absence de
VT_EMPTY
contenu.
VT_VECTOR | VT_LPWSTR
- Chaque chaîne du vecteur doit respecter les règles pour
VT_LPWSTR
listées ci-dessus. En outre, le vecteur ne doit avoir aucun doublon et aucun pointeur null. - S’il s’agit d’une propriété d’arborescence, aucune valeur ne peut être l’ancêtre d’une autre valeur. Par exemple,
L"Friend"
est un ancêtre de L"Friend/Bob ». - S’il n’y a pas de contenu, la contrainte supprime les caractères dupliqués et ancêtres et entraîne la création de
VT_EMPTY
.
- Aucun espace de début ou de fin. La chaîne n’est pas vide. La chaîne n’est pas NULL. Par exemple :
- Le cas échéant, la valeur est vérifiée par rapport à l’énumération du type de description de propriété. Les vérifications suivantes s’appliquent.
Type d’énumération Type de valeur Forme canonique Discret ou range VT_EMPTY
Toujours canonique Discret VT_LPWSTR
La chaîne correspond à l’une des chaînes énumérées autorisées pour la propriété . Les comparaisons ne respectent pas la casse. Si ce n’est pas le cas, convertissez la valeur en VT_EMPTY
.Discret Numérique Le nombre correspond à l’une des valeurs énumérées autorisées pour la propriété. Si ce n’est pas le cas, convertissez la valeur en VT_EMPTY
.Discret VT_VECTOR | VT_LPWSTR
Chaque chaîne du vecteur correspond à l’une des chaînes énumérées autorisées pour la propriété . Les comparaisons ne respectent pas la casse. Si ce n’est pas le cas, supprimez cette chaîne du vecteur. Si le vecteur résultant est vide, convertissez la valeur en VT_EMPTY
.Discret VT_VECTOR |
NumériqueChaque nombre dans le vecteur correspond à l’une des valeurs énumérées autorisées pour la propriété . Si ce n’est pas le cas, supprimez ce nombre du vecteur. Si le vecteur résultant est vide, convertissez la valeur en VT_EMPTY
.Variait VT_LPWSTR
La chaîne existe dans la plage autorisée pour la propriété . Les comparaisons respectent la casse. Si ce n’est pas le cas, convertissez la valeur en VT_EMPTY
.Variait Numérique Le nombre existe dans la plage autorisée pour la propriété . Si ce n’est pas le cas, convertissez la valeur en VT_EMPTY. Variait VT_VECTOR | VT_LPWSTR
Chaque chaîne du vecteur existe dans la plage autorisée pour la propriété . Les comparaisons respectent la casse. Si ce n’est pas le cas, supprimez cette chaîne du vecteur. Si le vecteur résultant est vide, convertissez la valeur en VT_EMPTY
.Variait VT_VECTOR
| NumériqueChaque nombre dans le vecteur existe dans la plage autorisée pour la propriété . Si ce n’est pas le cas, supprimez ce nombre du vecteur. Si le vecteur résultant est vide, convertissez la valeur en VT_EMPTY.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | propsys.h |