Condividi tramite


Funzione VariantChangeType (oleauto.h)

Importante

Questa API è interessata dal problema descritto in supporto tecnico Microsoft argomento VarI8FromCy produce un valore non corretto quando il valore CY è molto grande.

Converte una variante da un tipo a un altro.

Sintassi

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

Parametri

[out] pvargDest

Variante di destinazione. Se si tratta dello stesso valore di pvarSrc, la variante verrà convertita sul posto.

[in] pvarSrc

Variante da convertire.

[in] wFlags

Bandiere.

Valore Significato
VARIANT_NOVALUEPROP
Impedisce alla funzione di tentare di coercire un oggetto in un tipo fondamentale ottenendo la proprietà Value. Le applicazioni devono impostare questo flag solo se necessario, perché rende il comportamento incoerente con altre applicazioni.
VARIANT_ALPHABOOL
Converte un valore VT_BOOL in una stringa contenente "True" o "False".
VARIANT_NOUSEROVERRIDE
Per le conversioni da o verso VT_BSTR, passa LOCALE_NOUSEROVERRIDE alle routine di coercizione di base.
VARIANT_LOCALBOOL
Per le conversioni da VT_BOOL a VT_BSTR e indietro, usa la lingua specificata dalle impostazioni locali in uso nel computer locale.

[in] vt

Tipo in cui eseguire la conversione. Se il codice restituito è S_OK, il campo vt di *pvargDest è garantito che sia uguale a questo valore.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
DISP_E_BADVARTYPE
Il tipo variant non è un tipo valido di variant.
DISP_E_OVERFLOW
I dati a cui punta pvarSrc non rientrano nel tipo di destinazione.
DISP_E_TYPEMISMATCH
Impossibile forzare l'argomento al tipo specificato.
E_INVALIDARG
Uno degli argomenti non è valido.
E_OUTOFMEMORY
Memoria insufficiente per completare l'operazione.

Commenti

La funzione VariantChangeType gestisce le coercizioni tra i tipi fondamentali (incluse le coercizioni da numerica a stringa e da stringa a numerica). L'argomento pvarSrc viene modificato durante il processo di conversione. Ad esempio, se la variante di origine è di tipo VT_BOOL e la destinazione è di tipo VT_UINT, l'argomento pvarSrc viene prima convertito in VT_I2 e quindi la conversione procede. Una variante con VT_BYREF set viene forzata su un valore ottenendo il valore a cui si fa riferimento. Un oggetto viene assegnato a un valore richiamando la proprietà Value dell'oggetto (DISPID_VALUE).

In genere, l'implementatore di IDispatch::Invoke determina il membro a cui si accede e quindi chiama VariantChangeType per ottenere il valore di uno o più argomenti. Ad esempio, se la chiamata IDispatch specifica un membro SetTitle che accetta un argomento stringa, l'implementatore chiamerà VariantChangeType per tentare di forzare l'argomento per VT_BSTR. Se VariantChangeType non restituisce un errore, è possibile ottenere l'argomento direttamente dal campo bstrVal di VARIANTARG. Se VariantChangeType restituisce DISP_E_TYPEMISMATCH, l'implementatore imposterà *puArgErr su 0 (che indica l'argomento in errore) e restituirà DISP_E_TYPEMISMATCH da Invoke.

Le matrici di un tipo non possono essere convertite in matrici di un altro tipo con questa funzione.

Nota Il tipo di variantARG non deve essere modificato nella matrice rgvarg sul posto.
 

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione oleauto.h
Libreria OleAut32.lib
DLL OleAut32.dll

Vedi anche

Funzioni di manipolazione varianti

VariantChangeTypeEx