Partager via


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

  1. 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.
  2. 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.
  3. 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.
Note D’autres types peuvent être pris en charge à l’avenir.
 
La conversion entre des vecteurs (VT_VECTOR) et des tableaux (VT_ARRAY) est prise en charge dans certains cas. Lorsqu’il est pris en charge, le nombre d’éléments doit être le même dans chacun d’eux. Un vecteur à valeur unique peut être converti en une valeur non vectorielle, mais un vecteur à valeurs multiples ne peut pas être converti en type non vectoriel.

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