variantChangeType 函数 (oleauto.h)

重要

此 API 受Microsoft 支持部门主题 VarI8FromCy 在 CY 值非常大时生成错误值的问题的影响。

将变体从一种类型转换为另一种类型。

语法

HRESULT VariantChangeType(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  USHORT           wFlags,
  [in]  VARTYPE          vt
);

参数

[out] pvargDest

目标变体。 如果这与 pvarSrc 相同,则将就地转换变体。

[in] pvarSrc

要转换的变体。

[in] wFlags

标志。

含义
VARIANT_NOVALUEPROP
通过获取 Value 属性,防止函数尝试将对象强制转换为基本类型。 应用程序应仅在必要时设置此标志,因为这会使应用程序的行为与其他应用程序不一致。
VARIANT_ALPHABOOL
将VT_BOOL值转换为包含“True”或“False”的字符串。
VARIANT_NOUSEROVERRIDE
对于与VT_BSTR的转换,将LOCALE_NOUSEROVERRIDE传递给核心强制程序例程。
VARIANT_LOCALBOOL
对于从VT_BOOL到VT_BSTR和返回的转换,请使用本地计算机上使用的区域设置指定的语言。

[in] vt

要转换为的类型。 如果返回代码S_OK,则 *pvargDestvt 字段保证等于此值。

返回值

此函数可以返回其中一个值。

返回代码 说明
S_OK
成功。
DISP_E_BADVARTYPE
变体类型不是有效的变体类型。
DISP_E_OVERFLOW
pvarSrc 指向的数据不适合目标类型。
DISP_E_TYPEMISMATCH
无法将 参数强制设置为指定的类型。
E_INVALIDARG
其中一个参数无效。
E_OUTOFMEMORY
内存不足,无法完成操作。

注解

VariantChangeType 函数处理基本类型之间的强制转换, (包括数字到字符串和字符串到数字强制) 。 pvarSrc 参数在转换过程中更改。 例如,如果源变体的类型为 VT_BOOL,而目标的类型为 VT_UINT,则 pvarSrc 参数首先转换为 VT_I2 然后转换继续。 通过获取引用的值,将具有VT_BYREF集的变体强制转换为值。 通过调用对象的 Value 属性 (DISPID_VALUE) ,将对象强制转换为值。

通常, IDispatch::Invoke 的实现者确定要访问的成员,然后调用 VariantChangeType 以获取一个或多个参数的值。 例如,如果 IDispatch 调用指定采用一个字符串参数的 SetTitle 成员,则实现者将调用 VariantChangeType 以尝试强制参数VT_BSTR。 如果 VariantChangeType 不返回错误,则可以直接从 VARIANTARG 的 bstrVal 字段获取参数。 如果 VariantChangeType 返回DISP_E_TYPEMISMATCH,则实现者会将 *puArgErr 设置为 0 (指示错误参数) ,并从 Invoke 返回DISP_E_TYPEMISMATCH。

使用此函数无法将一种类型的数组转换为另一种类型的数组。

注意 不应在 rgvarg 数组中就地更改 VARIANTARG 的类型。
 

要求

要求
目标平台 Windows
标头 oleauto.h
Library OleAut32.lib
DLL OleAut32.dll

另请参阅

变体操作函数

VariantChangeTypeEx