Freigeben über


VariantChangeType-Funktion (oleauto.h)

Wichtig

Diese API ist von dem problem betroffen, das in Microsoft-Support Thema VarI8FromCy beschrieben wird, erzeugt einen falschen Wert, wenn der CY-Wert sehr groß ist.

Konvertiert eine Variante von einem Typ in einen anderen.

Syntax

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

Parameter

[out] pvargDest

Die Zielvariante. Wenn dies mit pvarSrc identisch ist, wird die Variante an Ort und Stelle konvertiert.

[in] pvarSrc

Die zu konvertierende Variante.

[in] wFlags

Flaggen.

Wert Bedeutung
VARIANT_NOVALUEPROP
Verhindert, dass die Funktion versucht, ein Objekt mit einem fundamentalen Typ zu koerieren, indem die Value-Eigenschaft abgerufen wird. Anwendungen sollten dieses Flag nur bei Bedarf festlegen, da ihr Verhalten mit anderen Anwendungen inkonsistent wird.
VARIANT_ALPHABOOL
Konvertiert einen VT_BOOL Wert in eine Zeichenfolge, die entweder "True" oder "False" enthält.
VARIANT_NOUSEROVERRIDE
Für Konvertierungen in oder aus VT_BSTR übergibt LOCALE_NOUSEROVERRIDE an die zentralen Coercion-Routinen.
VARIANT_LOCALBOOL
Für Konvertierungen von VT_BOOL in VT_BSTR und zurück verwendet die Sprache, die durch das auf dem lokalen Computer verwendete Gebietsschema angegeben wird.

[in] vt

Der Typ, in den konvertiert werden soll. Wenn der Rückgabecode S_OK ist, ist das vt-Feld des *pvargDest garantiert gleich diesem Wert.

Rückgabewert

Diese Funktion kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
DISP_E_BADVARTYPE
Der Variantentyp ist kein gültiger Variantentyp.
DISP_E_OVERFLOW
Die daten, auf die von pvarSrc verwiesen wird, passen nicht in den Zieltyp.
DISP_E_TYPEMISMATCH
Das Argument konnte nicht an den angegebenen Typ geerct werden.
E_INVALIDARG
Eines der Argumente ist ungültig.
E_OUTOFMEMORY
Unzureichender Arbeitsspeicher, um den Vorgang abzuschließen.

Hinweise

Die VariantChangeType-Funktion verarbeitet Coercions zwischen den grundlegenden Typen (einschließlich numerischer zu Zeichenfolge und Zeichenfolgen-zu-numerischer Koercionen). Das pvarSrc-Argument wird während des Konvertierungsprozesses geändert. Wenn die Quellvariante beispielsweise vom Typ VT_BOOL und das Ziel vom Typ VT_UINT ist, wird das pvarSrc-Argument zuerst in VT_I2 konvertiert, und dann wird die Konvertierung fortgesetzt. Eine Variante, die VT_BYREF festgelegt hat, wird durch Abrufen des referenzierten Werts zu einem Wert geerct. Ein -Objekt wird durch Aufrufen der Value-Eigenschaft des Objekts (DISPID_VALUE) zu einem Wert zwangsvermittelt.

In der Regel bestimmt der Implementierer von IDispatch::Invoke , auf welches Element zugegriffen wird, und ruft dann VariantChangeType auf, um den Wert eines oder mehrerer Argumente abzurufen. Wenn der IDispatch-Aufruf beispielsweise ein SetTitle-Element angibt, das ein Zeichenfolgenargument akzeptiert, ruft der Implementierer VariantChangeType auf, um zu versuchen, das Argument zu VT_BSTR. Wenn VariantChangeType keinen Fehler zurückgibt, kann das Argument direkt aus dem Feld bstrVal des VARIANTARG abgerufen werden. Wenn VariantChangeType DISP_E_TYPEMISMATCH zurückgibt, würde der Implementierer *puArgErr auf 0 festlegen (was das Argument als Fehler angibt) und DISP_E_TYPEMISMATCH von Invoke zurückgeben.

Arrays eines Typs können mit dieser Funktion nicht in Arrays eines anderen Typs konvertiert werden.

Hinweis Der Typ eines VARIANTARG sollte nicht im rgvarg-Array geändert werden.
 

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile oleauto.h
Bibliothek OleAut32.lib
DLL OleAut32.dll

Weitere Informationen

Variantenbearbeitungsfunktionen

VariantChangeTypeEx