Windows变体强制规则?

时间:2016-12-13 20:15:11

标签: windows visual-c++ variant coercion

我有一个Windows VARIANT持有一个带有(据称)数字值的BSTR。

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

令我惊讶的是,传入一个字符串值"5.6".作为我的小数点分隔符,该函数成功进行整数转换,结果为lValllVal值为6!我原本期望转换错误或值5,这是sscanf给我的。

--> 是否有VARIANT conversion functions使用的转换规则的文档? <--

我发现VariantChangeType是通过(例如)VarI4FromStr实现的,但信息wrt。此函数使用的转换规则。

1 个答案:

答案 0 :(得分:0)

似乎没有任何文件。此

linked MSDN thread和一些调试,我可以得出结论:

  • VariantChangeType会调用数据类型转换函数(如上所述)
  • VarI4FromStr似乎在内部致电VarR8FromStr - 这解释了我们如何进行四舍五入
  • VarR*FromStr似乎致电VarParseNumFromStr
  • VarParseNumFromStr 似乎进一步委托数字解析本身(我在VS2010中快速测试);它没有记录任何解析规则。
  • 舍入似乎使用Round Half to Even或某些变体。