Compartir a través de


Función VariantChangeType (oleauto.h)

Importante

Esta API se ve afectada por el problema descrito en Soporte técnico de Microsoft tema VarI8FromCy genera un valor incorrecto cuando el valor CY es muy grande.

Convierte una variante de un tipo a otro.

Sintaxis

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

Parámetros

[out] pvargDest

Variante de destino. Si es lo mismo que pvarSrc, la variante se convertirá en su lugar.

[in] pvarSrc

Variante que se va a convertir.

[in] wFlags

Banderas.

Valor Significado
VARIANT_NOVALUEPROP
Impide que la función intente convertir un objeto en un tipo fundamental obteniendo la propiedad Value. Las aplicaciones solo deben establecer esta marca si es necesario, ya que hace que su comportamiento sea incoherente con otras aplicaciones.
VARIANT_ALPHABOOL
Convierte un valor de VT_BOOL en una cadena que contiene "True" o "False".
VARIANT_NOUSEROVERRIDE
En el caso de las conversiones a o desde VT_BSTR, pasa LOCALE_NOUSEROVERRIDE a las rutinas de coerción principales.
VARIANT_LOCALBOOL
Para las conversiones de VT_BOOL a VT_BSTR y atrás, usa el idioma especificado por la configuración regional en uso en el equipo local.

[in] vt

Tipo al que se va a convertir. Si el código devuelto es S_OK, se garantiza que el campo vt del *pvargDest sea igual a este valor.

Valor devuelto

Esta función puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
Correcto.
DISP_E_BADVARTYPE
El tipo de variante no es un tipo válido de variante.
DISP_E_OVERFLOW
Los datos a los que apunta pvarSrc no caben en el tipo de destino.
DISP_E_TYPEMISMATCH
No se pudo convertir el argumento en el tipo especificado.
E_INVALIDARG
Uno de los argumentos no es válido.
E_OUTOFMEMORY
Memoria insuficiente para completar la operación.

Comentarios

La función VariantChangeType controla las coerciones entre los tipos fundamentales (incluidas las coerciones numéricas a cadena y de cadena a numérica). El argumento pvarSrc se cambia durante el proceso de conversión. Por ejemplo, si la variante de origen es de tipo VT_BOOL y el destino es de tipo VT_UINT, el argumento pvarSrc se convierte primero en VT_I2 y, a continuación, la conversión continúa. Una variante que tiene VT_BYREF establecido se convierte en un valor obteniendo el valor al que se hace referencia. Un objeto se convierte en un valor invocando la propiedad Value del objeto (DISPID_VALUE).

Normalmente, el implementador de IDispatch::Invoke determina a qué miembro se accede y, a continuación, llama a VariantChangeType para obtener el valor de uno o varios argumentos. Por ejemplo, si la llamada A IDispatch especifica un miembro SetTitle que toma un argumento de cadena, el implementador llamaría a VariantChangeType para intentar convertir el argumento en VT_BSTR. Si VariantChangeType no devuelve un error, el argumento se podría obtener directamente del campo bstrVal del VARIANTARG. Si VariantChangeType devuelve DISP_E_TYPEMISMATCH, el implementador establecería *puArgErr en 0 (lo que indica el argumento en error) y devolvería DISP_E_TYPEMISMATCH de Invoke.

Las matrices de un tipo no se pueden convertir en matrices de otro tipo con esta función.

Nota El tipo de variantARG no debe cambiarse en la matriz rgvarg en su lugar.
 

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado oleauto.h
Library OleAut32.lib
Archivo DLL OleAut32.dll

Consulte también

Funciones de manipulación de variantes

VariantChangeTypeEx