VariantChangeTypeEx-Funktion (oleauto.h)

Wichtig

Diese API ist durch das 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, wobei eine LCID verwendet wird.

Syntax

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

Parameter

[out] pvargDest

Die Zielvariante. Wenn dies mit pvarSrc identisch ist, wird die Variante vor Ort konvertiert.

[in] pvarSrc

Die zu konvertierende Variante.

[in] lcid

Der Gebietsschemabezeichner. Die LCID ist nützlich, wenn der Typ des VARIANTARG-Quell- oder Zieltyps VT_BSTR, VT_DISPATCH oder VT_DATE ist.

[in] wFlags

Flaggen.

Wert Bedeutung
VARIANT_NOVALUEPROP
Verhindert, dass die Funktion versucht, ein Objekt in einen grundlegenden Typ zu umwandeln, indem sie die Value-Eigenschaft erhält. Anwendungen sollten dieses Flag nur bei Bedarf festlegen, da ihr Verhalten mit anderen Anwendungen inkonsistent ist.
VARIANT_ALPHABOOL
Konvertiert einen VT_BOOL Wert in eine Zeichenfolge, die entweder "True" oder "False" enthält.
VARIANT_NOUSEROVERRIDE
Für Konvertierungen in oder von VT_BSTR übergibt LOCALE_NOUSEROVERRIDE an die Kernkoersionsroutinen.
VARIANT_LOCALBOOL
Für Konvertierungen von VT_BOOL in VT_BSTR und zurück verwendet die Sprache, die vom auf dem lokalen Computer verwendeten Gebietsschema angegeben wird.

[in] vt

Der Typ, in den konvertiert werden soll. Wenn der Rückgabecode S_OK ist, ist das vt-Feld von *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 Variant-Typ ist kein gültiger Variant-Typ.
DISP_E_OVERFLOW
Die Daten, auf die pvarSrc verweist, passen nicht in den Zieltyp.
DISP_E_TYPEMISMATCH
Das Argument konnte nicht in den angegebenen Typ umgewandelt werden.
E_INVALIDARG
Eines der Argumente ist ungültig.
E_OUTOFMEMORY
Unzureichender Arbeitsspeicher, um den Vorgang abzuschließen.

Hinweise

Die VariantChangeTypeEx-Funktion verarbeitet Koercionen zwischen den grundlegenden Typen (einschließlich numerisch-zu-Zeichenfolgen und Zeichenfolgen-zu-Numerische-Koercionen). Eine Variante, für die VT_BYREF festgelegt ist, wird durch Abrufen des Werts, auf den verwiesen wird, in einen Wert umgewandelt. Ein Objekt wird in einen Wert umgewandelt, indem die Value-Eigenschaft (DISPID_VALUE) des Objekts aufgerufen wird.

In der Regel bestimmt der Implementierer von IDispatch::Invoke , auf welchen Member 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 VariantChangeTypeEx auf, um zu versuchen, das Argument zu VT_BSTR.

Wenn VariantChangeTypeEx keinen Fehler zurückgibt, kann das Argument direkt aus dem Feld bstrVal des VARIANTARG abgerufen werden. Wenn VariantChangeTypeEx DISP_E_TYPEMISMATCH zurückgibt, würde der Implementierer *puArgErr auf 0 festlegen (was das Argument als Fehler angibt) und DISP_E_TYPEMISMATCH von IDispatch::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 im rgvarg-Array nicht geändert werden.
 

Requirements (Anforderungen)

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

Weitere Informationen

Variantenbearbeitungsfunktionen

VariantChangeType