Fonction PropVariantChangeType (propvarutil.h)
Force une valeur stockée en tant que structure PROPVARIANT à une valeur équivalente d’un type variant différent.
Syntaxe
PSSTDAPI PropVariantChangeType(
[out] PROPVARIANT *ppropvarDest,
[in] REFPROPVARIANT propvarSrc,
[in] PROPVAR_CHANGE_FLAGS flags,
[in] VARTYPE vt
);
Paramètres
[out] ppropvarDest
Type : PROPVARIANT*
Pointeur vers une structure PROPVARIANT qui, lorsque cette fonction retourne correctement, reçoit la valeur sous la force et son nouveau type.
[in] propvarSrc
Type : REFPROPVARIANT
Référence à la structure PROPVARIANT source qui contient la valeur exprimée comme type d’origine.
[in] flags
Type : PROPVAR_CHANGE_FLAGS
Réservé, doit être 0.
[in] vt
Type : VARTYPE
Spécifie le nouveau type pour la valeur. Consultez les tableaux ci-dessous pour connaître les noms de types reconnus.
Valeur retournée
Type : HRESULT
Retourne S_OK en cas de réussite, ou une valeur d’erreur COM standard dans le cas contraire. Si la contrainte demandée n’est pas possible, une erreur est retournée.
Remarques
Notez que les structures PROPVARIANT source et de destination doivent être des structures distinctes. Vous ne pouvez pas remplacer les données PROPVARIANT sources par les nouvelles données de destination ; si vous tentez de le faire, une erreur s’affiche.
PropVariantChangeType convertit les valeurs entre les types suivants comme suit. Les nombres font référence aux conditions expliquées après les tables.
VT_LPWSTR | VT_BSTR | VT_BOOL | VT_FILETIME | VT_DATE | VT_CLSID | |
---|---|---|---|---|---|---|
VT_LPWSTR | Oui | Oui | Oui | Oui (2) | Oui (2) | Yes |
VT_BSTR | Oui | Oui | Oui | Oui (2) | Oui (2) | Yes |
VT_BOOL | Oui | Oui | Oui | Non | Non | Non |
VT_I2 | Oui | Oui | Oui | Non | Non | Non |
VT_I4 | Oui | Oui | Oui | Non | Non | Non |
VT_I8 | Oui | Oui | Oui | Non | Non | Non |
VT_UI2 | Oui | Oui | Oui | Non | Non | Non |
VT_UI4 | Oui | Oui | Oui | Non | Non | Non |
VT_UI8 | Oui | Oui | Oui | Non | Non | Non |
VT_R8 | Oui (3) | Oui (3) | Oui | Non | Non | Non |
VT_FILETIME | Oui (2) | Oui (2) | Non | Oui | Oui | Non |
VT_DATE | Oui (2) | Oui (2) | Non | Oui | Oui | Non |
VT_CLSID | Oui | Oui | Non | Non | Non | Oui |
VT_I2 | VT_I4 | VT_I8 | VT_UI2 | VT_UI4 | VT_UI8 | VT_R8 | |
---|---|---|---|---|---|---|---|
VT_LPWSTR | Oui | Oui | Oui | Oui | Oui | Oui | Oui (3) |
VT_BSTR | Oui | Oui | Oui | Oui | Oui | Oui | Oui (3) |
VT_BOOL | Oui | Oui | Oui | Oui | Oui | Oui | Oui |
VT_I2 | Oui | Oui | Oui | Oui (1) | Oui (1) | Oui (1) | Oui (1) |
VT_I4 | Oui (1) | Oui | Oui | Oui (1) | Oui (1) | Oui (1) | Oui (1) |
VT_I8 | Oui (1) | Oui (1) | Oui | Oui (1) | Oui (1) | Oui (1) | Oui (1) |
VT_UI2 | Oui (1) | Oui | Oui | Oui | Oui | Oui | Oui (1) |
VT_UI4 | Oui (1) | Oui (1) | Oui | Oui (1) | Oui | Oui | Oui (1) |
VT_UI8 | Oui (1) | Oui (1) | Oui (1) | Oui (1) | Oui (1) | Oui | Oui (1) |
VT_R8 | Oui (1) | Oui (1) | Oui (1) | Oui (1) | Oui (1) | Oui (1) | Yes |
VT_FILETIME | Non | Non | Non | Non | Non | Non | Non |
VT_DATE | Non | Non | Non | Non | Non | Non | Non |
VT_CLSID | Non | Non | Non | Non | Non | Non | Non |
Conditions
- Lors de la conversion entre les types numériques, les conversions hors plage échouent. Pour instance, une valeur signée négative pour un type non signé ou une valeur non signée de 4 octets supérieure à 65535 à un type non signé de 2 octets.
- Lors de la conversion entre des chaînes et des dates, un formulaire de chaîne canonique est utilisé plutôt qu’une représentation localisée ou « lisible par l’homme ». Le format est « aaaa/mm/jj :hh :mm :ss.fff » (année, mois, date, heures, minutes, secondes, millisecondes). Notez que cette précision est inférieure à celle prise en charge par le type FILETIME , mais qu’elle doit être suffisante pour la plupart des besoins.
- Lors de la conversion entre des nombres à virgule flottante et des chaînes, le séparateur décimal des paramètres régionaux actuels est utilisé. Notez que cela peut entraîner des problèmes lorsque ces valeurs sont enregistrées dans des fichiers déplacés entre différents paramètres régionaux.
La contrainte entre les types est effectuée sans respecter les informations spécifiques à la propriété. Les contraintes spécifiques aux propriétés doivent être effectuées à l’aide de PSCoerceToCanonicalValue. En outre, si la forme de chaîne d’une valeur est nécessaire à des fins d’interface utilisateur, PSFormatForDisplay doit être utilisé pour mettre en forme la valeur en fonction des paramètres régionaux et des informations spécifiques à la propriété plutôt que d’utiliser PropVariantChangeType pour forcer la valeur à une chaîne.
Exemples
L’exemple de code suivant, à inclure dans un programme plus grand, montre comment utiliser PropVariantChangeType pour initialiser une valeur VT_FILETIME à partir d’une chaîne.
PROPVARIANT propvarString = {0};
HRESULT hr = InitPropVariantFromString(L"2007/01/30:12:00:00.000", &propvarString);
if (SUCCEEDED(hr))
{
PROPVARIANT propvarFiletime = {0};
hr = PropVariantChangeType(&propvarFiletime, propvarString, 0, VT_FILETIME);
if (SUCCEEDED(hr))
{
// propvarFiletime now contains the FILETIME representation
// of 1/30/2007 12:00 PM
PropVariantClear(&propvarFiletime);
}
PropVariantClear(&propvarString);
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP avec SP2, Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 avec SP1 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | propvarutil.h |
Bibliothèque | Propsys.lib |
DLL | Propsys.dll (version 6.0 ou ultérieure) |
Composant redistribuable | Windows Desktop Search (WDS) 3.0 |