Windows 变体强制规则?
Windows Variant Coercion Rules?
我有一个 Windows VARIANT
持有一个带有(假定的)数值的 BSTR。
我想使用 VariantChangeType
将此 BSTR 值转换为 VT_I4 或 VT_I8 或 ...
令我惊讶的是,传入一个字符串值"5.6"
,.
是我的小数点分隔符,函数成功进行整数转换,结果lVal
或llVal
值为 6
!我本以为会出现转换错误或 5
的值,这就是 sscanf
给我的结果。
-->
VARIANT conversion functions使用的转换规则有文档吗? <--
我发现 VariantChangeType
是通过(例如)VarI4FromStr
实现的,但是有 zero 信息 wrt。此函数使用的转换规则。
似乎没有关于此的任何文档。
从 linked MSDN thread 和一些调试,我可以得出结论:
VariantChangeType
确实调用了数据类型转换函数(如前所述)
VarI4FromStr
似乎在内部调用 VarR8FromStr
- 这解释了我们如何舍入
VarR*FromStr
好像叫VarParseNumFromStr
VarParseNumFromStr
not 似乎进一步委托了数字解析本身(我在 VS2010 中的快速测试);它没有记录任何解析规则 AFAIK。
- 四舍五入似乎使用 Round Half to Even 或一些变化。
我有一个 Windows VARIANT
持有一个带有(假定的)数值的 BSTR。
我想使用 VariantChangeType
将此 BSTR 值转换为 VT_I4 或 VT_I8 或 ...
令我惊讶的是,传入一个字符串值"5.6"
,.
是我的小数点分隔符,函数成功进行整数转换,结果lVal
或llVal
值为 6
!我本以为会出现转换错误或 5
的值,这就是 sscanf
给我的结果。
-->
VARIANT conversion functions使用的转换规则有文档吗? <--
我发现 VariantChangeType
是通过(例如)VarI4FromStr
实现的,但是有 zero 信息 wrt。此函数使用的转换规则。
似乎没有关于此的任何文档。
从 linked MSDN thread 和一些调试,我可以得出结论:
VariantChangeType
确实调用了数据类型转换函数(如前所述)VarI4FromStr
似乎在内部调用VarR8FromStr
- 这解释了我们如何舍入VarR*FromStr
好像叫VarParseNumFromStr
VarParseNumFromStr
not 似乎进一步委托了数字解析本身(我在 VS2010 中的快速测试);它没有记录任何解析规则 AFAIK。- 四舍五入似乎使用 Round Half to Even 或一些变化。