gpt4 book ai didi

c++ - VariantChangeType 和溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:40 25 4
gpt4 key购买 nike

据我了解,VariantChangeType应该正确检测溢出并在发生溢出时返回 DISP_E_OVERFLOW。但是,我发现至少有一种情况不会发生这种情况。有没有人对此有任何见解?我正在使用 Windows 7、VS2013、VC++2008。

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 返回的,VARIANT v 的值是 -32768(正是我所期望的来自 16 位整数溢出)。

最佳答案

documentation对于 VariantChangeType() 状态:

DISP_E_OVERFLOW
The data pointed to by pvarSrc does not fit in the destination type.

如果从 VT_UI2VT_I2 的转换对于 32768 成功,这表明 VT_UI2 值适合 VT_I2 ,即使它换行为负值。

假设变体持有 VT_UI4。如果该值 > 32767,则无法转换为 VT_I2,并且应该报告 DISP_E_OVERFLOW

另一方面,documentation VarI2FromUI2()DISP_E_OVERFLOW 说同样的事情,而 VarI2FromUI2() 实际上确实因 DISP_E_OVERFLOW 而失败输入值32768。

因此这表明 VariantChangeType() 在此转换中被破坏,或者它使用了一组不同的转换规则,可能是出于遗留原因。

关于c++ - VariantChangeType 和溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com