This function converts a variant from one type to another, using a LCID.
HRESULT VariantChangeTypeEx( VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvarSrc, LCID lcid, unsigned short wFlags, VARTYPE vt );
[out] Pointer to the VARIANTARG to receive the coerced type. If this is the same as pvarSrc, the variant is converted in place.
[in] Pointer to the source VARIANTARG to be coerced.
[in] LCID for the variant to coerce. The LCID is useful when the type of the source or destination VARIANTARG is VT_BSTR, VT_DISPATCH, or VT_DATE.
[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 its Value property. Applications should set this flag only if necessary, because it makes their behavior inconsistent with other applications.
[in] Specifies the type to coerce to. If the return code is S_OK, the vt member of the VARIANTARG specified by *pvargDest is guaranteed to be equal to this value.
The following table shows the HRESULT values that can be returned by this function.
|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.|
Passing invalid (and under some circumstances NULL) pointers to this function causes an unexpected termination of the application.
The VariantChangeTypeEx function handles coercions between the fundamental types (including numeric-to-string and string-to-numeric coercions). To change a type with the VT_BYREF flag set to one without VT_BYREF, change the referenced value to VariantChangeTypeEx. To coerce objects to fundamental types, obtain the value of the Value property.
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 implementor would call VariantChangeTypeEx to attempt to coerce the argument to VT_BSTR.
If VariantChangeTypeEx does not return an error the argument could then be obtained directly from the bstrVal member of the VARIANTARG. If VariantChangeTypeEx 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.
OS Versions: Windows CE 2.0 and later.
Link Library: Oleaut32.lib.
Last updated on Wednesday, April 13, 2005
© 2005 Microsoft Corporation. All rights reserved.