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.
[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 |
---|---|
|
Erfolg. |
|
Der Variant-Typ ist kein gültiger Variant-Typ. |
|
Die Daten, auf die pvarSrc verweist, passen nicht in den Zieltyp. |
|
Das Argument konnte nicht in den angegebenen Typ umgewandelt werden. |
|
Eines der Argumente ist ungültig. |
|
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.
Requirements (Anforderungen)
Zielplattform | Windows |
Kopfzeile | oleauto.h |
Bibliothek | OleAut32.lib |
DLL | OleAut32.dll |