Partager via


Fonction VariantChangeType (oleauto.h)

Important

Cette API est affectée par le problème décrit dans Support Microsoft rubrique VarI8FromCy produit une valeur incorrecte lorsque la valeur CY est très grande.

Convertit une variante d’un type en un autre.

Syntaxe

HRESULT VariantChangeType(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  USHORT           wFlags,
  [in]  VARTYPE          vt
);

Paramètres

[out] pvargDest

Variante de destination. S’il s’agit de la même valeur que pvarSrc, la variante est convertie sur place.

[in] pvarSrc

Variante à convertir.

[in] wFlags

Drapeaux.

Valeur Signification
VARIANT_NOVALUEPROP
Empêche la fonction de tenter de contraindre un objet à un type fondamental en obtenant la propriété Value. Les applications doivent définir cet indicateur uniquement si nécessaire, car cela rend leur comportement incohérent avec d’autres applications.
VARIANT_ALPHABOOL
Convertit une valeur VT_BOOL en chaîne contenant « True » ou « False ».
VARIANT_NOUSEROVERRIDE
Pour les conversions vers ou à partir de VT_BSTR, passe LOCALE_NOUSEROVERRIDE aux routines de forçage principales.
VARIANT_LOCALBOOL
Pour les conversions de VT_BOOL en VT_BSTR et retour arrière, utilise la langue spécifiée par les paramètres régionaux en cours d’utilisation sur l’ordinateur local.

[in] vt

Type vers lequel effectuer la conversion. Si le code de retour est S_OK, le champ vt du *pvargDest est garanti égal à cette valeur.

Valeur retournée

Cette fonction peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
Réussite.
DISP_E_BADVARTYPE
Le type de variant n’est pas un type valide de variant.
DISP_E_OVERFLOW
Les données pointées par pvarSrc ne correspondent pas au type de destination.
DISP_E_TYPEMISMATCH
Impossible de contraindre l’argument au type spécifié.
E_INVALIDARG
L’un des arguments n’est pas valide.
E_OUTOFMEMORY
Mémoire insuffisante pour terminer l’opération.

Remarques

La fonction VariantChangeType gère les contraintes entre les types fondamentaux (y compris les contraintes de type numérique à chaîne et de chaîne à chaîne). L’argument pvarSrc est modifié pendant le processus de conversion. Par exemple, si la variante source est de type VT_BOOL et que la destination est de type VT_UINT, l’argument pvarSrc est d’abord converti en VT_I2, puis la conversion continue. Une variante qui a VT_BYREF jeu est convertie en une valeur en obtenant la valeur référencée. Un objet est converti en une valeur en appelant la propriété Value de l’objet (DISPID_VALUE).

En règle générale, l’implémenteur de IDispatch ::Invoke détermine le membre auquel vous accédez, puis appelle VariantChangeType pour obtenir la valeur d’un ou de plusieurs arguments. Par exemple, si l’appel IDispatch spécifie un membre SetTitle qui prend un argument de chaîne, l’implémenteur appelle VariantChangeType pour tenter de contraindre l’argument à VT_BSTR. Si VariantChangeType ne retourne pas d’erreur, l’argument peut alors être obtenu directement à partir du champ bstrVal du VARIANTARG. Si VariantChangeType retourne DISP_E_TYPEMISMATCH, l’implémenteur définit *puArgErr sur 0 (indiquant l’argument dans une erreur) et retourne DISP_E_TYPEMISMATCH à partir d’Invoke.

Les tableaux d’un type ne peuvent pas être convertis en tableaux d’un autre type avec cette fonction.

Note Le type d’un VARIANTARG ne doit pas être modifié dans le tableau rgvarg en place.
 

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête oleauto.h
Bibliothèque OleAut32.lib
DLL OleAut32.dll

Voir aussi

Fonctions de manipulation de variantes

VariantChangeTypeEx