HRESULT VariantChangeType(
VARIANTARG FAR* pvargDest,
VARIANTARG FAR* pvarSrc,
unsigned short wFlags,
VARTYPE vt
);
Converts a variant from one type to another.
The return value obtained from the returned HRESULT is one of the following.
Return value | Meaning |
---|---|
S_OK | Success. |
DISP_E_BADVARTYPE | The variant type vt is not a valid type of variant. |
DISP_E_OVERFLOW | The data pointed to by pvarSrc does not fit in the destination type. |
DISP_E_TYPEMISMATCH | The argument could not be coerced to the specified type. |
E_INVALIDARG | One of the arguments is invalid. |
E_OUTOFMEMORY | Memory could not be allocated for the conversion. |
The VariantChangeType function handles coercions between the fundamental types (including numeric-to-string and string-to-numeric coercions). A variant that has VT_BYREF set is coerced to a value by obtaining the referenced value. An object is coerced to a value by invoking the object's Value property (DISPID_VALUE).
Typically, the implementor of IDispatch::Invoke determines which member is being accessed, and then calls VariantChangeType to get the value of one or more arguments. For example, if the IDispatch call specifies a SetTitle member that takes one string argument, the implementor would call VariantChangeType to attempt to coerce the argument to VT_BSTR. If VariantChangeType does not return an error, the argument could then be obtained directly from the bstrVal field of the VARIANTARG. If VariantChangeType returns DISP_E_TYPEMISMATCH, the implementor would set *puArgErr to 0 (indicating the argument in error) and return DISP_E_TYPEMISMATCH from IDispatch::Invoke.
Arrays of one type cannot be converted to arrays of another type with this function.
Note The type of a VARIANTARG should not be changed in the rgvarg array in place.
Windows NT: Use version 3.1 and later.
Windows: Use Windows 95 and later.
Header: Declared in oleauto.h.
Import Library: Link with oleaut32.lib.