C++COM ATL VariantChangeType 会导致 WSH 崩溃

C++ COM ATL VariantChangeType causes WSH to crash

本文关键字:WSH 崩溃 ATL VariantChangeType C++COM      更新时间:2023-10-16

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

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

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

WSH崩溃有什么问题?我确定这是导致崩溃的行,因为显示此行之前的消息框,但此行之后的消息框未显示。然后窗户说:

® Microsoft 基于 Windows 的脚本主机已停止工作

我的语法在这里有误吗?

我通过使用CComVariant::ChangeType而不是使用如下所示VariantChangeType函数来解决此问题:

CComVariant CV = Variant;
HRESULT Result = CV.ChangeType(VT_I2);