VariantChangeType
A version of this page is also available for
4/8/2010
This function converts a variant from one type to another.
Syntax
HRESULT VariantChangeType(
VARIANTARG FAR* pvargDest,
VARIANTARG FAR* pvarSrc,
unsigned short wFlags,
VARTYPE vt
);
Parameters
- pvargDest
[out] Pointer to the VarBoolFromDisp to receive the coerced type. If this is the same as pvarSrc, the variant is converted in place.
- pvarSrc
[in] Pointer to the source VARIANTARG to be coerced.
wFlags
[in] Flags that control the coercion.The only defined flag is VARIANT_NOVALUEPROP, which prevents the function from attempting to coerce an object to a fundamental type by getting the Value property.
Applications should set this flag only if necessary, because it makes their behavior inconsistent with other applications.
- vt
[in] Specifies the type to coerce to. If the return code is S_OK, the vt member of the VARIANTARG specified by *pvargDest is the same as this value.
Return Value
Returns the HRESULT values shown in the following table.
Value | Description |
---|---|
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 |
An argument is invalid. |
E_OUTOFMEMORY |
Memory could not be allocated for the conversion. |
Remarks
Passing invalid (and under some circumstances NULL) pointers to this function causes an unexpected termination of the application.
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 implementer 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 implementer 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 member 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.
The type of a VARIANTARG should not be changed in the rgvarg array in place.
Requirements
Header | oleauto.h |
Library | oleaut32.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
Automation Functions
VarBoolFromDisp
VARIANT and VARIANTARG
IDispatch::Invoke
IDispatch