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.
[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 |
---|---|
|
Erfolg. |
|
Der Variantentyp ist kein gültiger Variantentyp. |
|
Die daten, auf die von pvarSrc verwiesen wird, passen nicht in den Zieltyp. |
|
Das Argument konnte nicht an den angegebenen Typ geerct werden. |
|
Eines der Argumente ist ungültig. |
|
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.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | oleauto.h |
Bibliothek | OleAut32.lib |
DLL | OleAut32.dll |