据我所知,VariantChangeType
应该是正确检测溢出并返回DISP_E_OVERFLOW
如果发生溢出。但是,我发现至少有一个情况不会发生。有没有人对此有所了解?我正在使用Windows 7,VS2013,VC++ 2008。VariantChangeType和溢出
VARIANT v;
VariantInit(&v);
v.vt = VT_UI2;
v.uiVal = 32768;
HRESULT hr = VariantChangeType(&v, &v, 0, VT_I2);
通过上面的代码,我预计hr
将等于DISP_E_OVERFLOW
。但S_OK
从VariantChangeType
返回和的值是-32768
(正是我期望从16位整数溢出)。
+1。这种差异对我来说似乎是一个(20岁)的错误。 – 2014-09-19 07:51:10
经过多次辩论后,我会给出这个答案。在下面看到我对@Hans的评论。 – 2014-09-22 15:23:09