PropVariantChangeType 函数 (propvarutil.h)
将存储为 PROPVARIANT 结构的值强制转换为不同变体类型的等效值。
语法
PSSTDAPI PropVariantChangeType(
[out] PROPVARIANT *ppropvarDest,
[in] REFPROPVARIANT propvarSrc,
[in] PROPVAR_CHANGE_FLAGS flags,
[in] VARTYPE vt
);
参数
[out] ppropvarDest
类型: PROPVARIANT*
指向 PROPVARIANT 结构的指针,此函数成功返回时接收强制值及其新类型。
[in] propvarSrc
类型: REFPROPVARIANT
对源 PROPVARIANT 结构的引用,该结构包含以原始类型表示的值。
[in] flags
类型: PROPVAR_CHANGE_FLAGS
保留,必须为 0。
[in] vt
类型: VARTYPE
指定值的新类型。 有关可识别的类型名称,请参阅下表。
返回值
类型: HRESULT
如果成功,则返回 S_OK ,否则返回标准 COM 错误值。 如果无法执行请求的强制操作,则返回错误。
注解
请注意,源和目标 PROPVARIANT 结构必须是单独的结构。 不能使用新的目标数据覆盖源 PROPVARIANT 数据;尝试执行此操作将导致错误。
PropVariantChangeType 在以下类型之间转换值,如下所示。 数字是指表后说明的条件。
VT_LPWSTR | VT_BSTR | VT_BOOL | VT_FILETIME | VT_DATE | VT_CLSID | |
---|---|---|---|---|---|---|
VT_LPWSTR | 是 | 是 | 是 | 是 (2) | 是 (2) | 是 |
VT_BSTR | 是 | 是 | 是 | 是 (2) | 是 (2) | 是 |
VT_BOOL | 是 | 是 | 是 | 否 | 否 | 否 |
VT_I2 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_I4 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_I8 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_UI2 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_UI4 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_UI8 | 是 | 是 | 是 | 否 | 否 | 否 |
VT_R8 | 是 (3) | 是 (3) | 是 | 否 | 否 | 否 |
VT_FILETIME | 是 (2) | 是 (2) | 否 | 是 | 是 | 否 |
VT_DATE | 是 (2) | 是 (2) | 否 | 是 | 是 | 否 |
VT_CLSID | 是 | 是 | 否 | 否 | 否 | 是 |
VT_I2 | VT_I4 | VT_I8 | VT_UI2 | VT_UI4 | VT_UI8 | VT_R8 | |
---|---|---|---|---|---|---|---|
VT_LPWSTR | 是 | 是 | 是 | 是 | 是 | 是 | 是 (3) |
VT_BSTR | 是 | 是 | 是 | 是 | 是 | 是 | 是 (3) |
VT_BOOL | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
VT_I2 | 是 | 是 | 是 | 是 (1) | 是 (1) | 是 (1) | 是 (1) |
VT_I4 | 是 (1) | 是 | 是 | 是 (1) | 是 (1) | 是 (1) | 是 (1) |
VT_I8 | 是 (1) | 是 (1) | 是 | 是 (1) | 是 (1) | 是 (1) | 是 (1) |
VT_UI2 | 是 (1) | 是 | 是 | 是 | 是 | 是 | 是 (1) |
VT_UI4 | 是 (1) | 是 (1) | 是 | 是 (1) | 是 | 是 | 是 (1) |
VT_UI8 | 是 (1) | 是 (1) | 是 (1) | 是 (1) | 是 (1) | 是 | 是 (1) |
VT_R8 | 是 (1) | 是 (1) | 是 (1) | 是 (1) | 是 (1) | 是 (1) | 是 |
VT_FILETIME | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
VT_DATE | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
VT_CLSID | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
条件
- 在数值类型之间进行转换时,范围外转换会失败。 例如,无符号类型的负有符号值,或大于 65535 的 4 字节无符号值到 2 字节无符号类型。
- 在字符串和日期之间转换时,将使用规范字符串形式,而不是本地化或“可读”表示形式。 格式为“yyyy/mm/dd:hh:mm:ss.fff” (年、月、日、小时、分钟、秒、毫秒) 。 请注意,这一精度低于 FILETIME 类型支持的精度,但它应该足以满足大多数目的。
- 在浮点数和字符串之间转换时,将使用当前区域设置的十进制分隔符。 请注意,当这些值保存在在不同区域设置之间移动的文件中时,这可能会导致问题。
在类型之间执行强制转换,而不考虑特定于属性的信息。 应使用 PSCoerceToCanonicalValue 执行特定于属性的强制操作。 此外,如果出于 UI 目的需要值的字符串形式,则应使用 PSFormatForDisplay 根据特定于区域设置和属性的信息设置值的格式,而不是使用 PropVariantChangeType 将值强制转换为字符串。
示例
下面的代码示例将作为较大程序的一部分包含,演示如何使用 PropVariantChangeType 从字符串初始化 VT_FILETIME 值。
PROPVARIANT propvarString = {0};
HRESULT hr = InitPropVariantFromString(L"2007/01/30:12:00:00.000", &propvarString);
if (SUCCEEDED(hr))
{
PROPVARIANT propvarFiletime = {0};
hr = PropVariantChangeType(&propvarFiletime, propvarString, 0, VT_FILETIME);
if (SUCCEEDED(hr))
{
// propvarFiletime now contains the FILETIME representation
// of 1/30/2007 12:00 PM
PropVariantClear(&propvarFiletime);
}
PropVariantClear(&propvarString);
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP SP2、Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 SP1 [仅限桌面应用] |
目标平台 | Windows |
标头 | propvarutil.h |
Library | Propsys.lib |
DLL | Propsys.dll (版本 6.0 或更高版本) |
可再发行组件 | Windows 桌面搜索 (WDS) 3.0 |