Condividi tramite


Funzione VariantChangeTypeEx (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, utilizzando un LCID.

Sintassi

HRESULT VariantChangeTypeEx(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  LCID             lcid,
  [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] lcid

Identificatore delle impostazioni locali. LCID è utile quando il tipo di variantARG di origine o di destinazione è VT_BSTR, VT_DISPATCH o VT_DATE.

[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 VariantChangeTypeEx gestisce le coercizioni tra i tipi fondamentali (incluse le coercizioni da numerica a stringa e da stringa a numerica). 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à VariantChangeTypeEx per tentare di forzare l'argomento per VT_BSTR.

Se VariantChangeTypeEx non restituisce un errore, è possibile ottenere l'argomento direttamente dal campo bstrVal di VARIANTARG. Se VariantChangeTypeEx restituisce DISP_E_TYPEMISMATCH, l'implementatore imposta *puArgErr su 0 (che indica l'argomento in errore) e restituisce DISP_E_TYPEMISMATCH da IDispatch::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

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

Vedi anche

Funzioni di manipolazione varianti

VariantChangeType