Windows 变体强制规则?

Windows Variant Coercion Rules?

我有一个 Windows VARIANT 持有一个带有(假定的)数值的 BSTR。

我想使用 VariantChangeType 将此 BSTR 值转换为 VT_I4 或 VT_I8 或 ...

令我惊讶的是,传入一个字符串值"5.6".是我的小数点分隔符,函数成功进行整数转换,结果lValllVal 值为 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 或一些变化。