C++ COM ATL VariantChangeType 导致 WSH 崩溃

C++ COM ATL VariantChangeType causes WSH to crash

我的 COM ATL 项目中有以下代码行导致 WSH 崩溃:

Result = VariantChangeType(&Variant, &Variant, VARIANT_NOUSEROVERRIDE, VT_UINT);

当上述函数在崩溃前被调用时,Variant 的类型是 VT_BSTR,这就是我使用 VARIANT_NOUSEROVERRIDE 标志的原因。我尝试删除标志但没有成功。

WSH 崩溃是怎么回事?我确定这是导致崩溃的行,因为显示了该行之前的消息框,但未显示该行之后的消息框。然后 Windows 说:

Microsoft ® Windows Based Script Host has stopped working

我的语法有问题吗?

我通过使用 CComVariant::ChangeType 而不是使用 VariantChangeType 函数解决了这个问题,如下所示:

CComVariant CV = Variant;

HRESULT Result = CV.ChangeType(VT_I2);