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

C++ C++;COM ATL VariantChangeType导致WSH崩溃,c++,variant,wsh,C++,Variant,Wsh,我的COM ATL项目中有以下代码行导致WSH崩溃: Result = VariantChangeType(&Variant, &Variant, VARIANT_NOUSEROVERRIDE, VT_UINT); 当上述函数在崩溃之前被调用时,Variant的类型是VT\u BSTR,这就是我使用Variant\u nouroverride标志的原因。我试着移除旗帜,但没有成功 WSH崩溃的原因是什么?我确信这是导致崩溃的那一行,因为这一行之前的消息框正在显示,但这一行之后的

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

Result = VariantChangeType(&Variant, &Variant, VARIANT_NOUSEROVERRIDE, VT_UINT);
当上述函数在崩溃之前被调用时,
Variant
的类型是
VT\u BSTR
,这就是我使用
Variant\u nouroverride
标志的原因。我试着移除旗帜,但没有成功

WSH崩溃的原因是什么?我确信这是导致崩溃的那一行,因为这一行之前的消息框正在显示,但这一行之后的消息框没有显示。然后Windows说:

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


我的语法错误吗?

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

CComVariant CV = Variant;

HRESULT Result = CV.ChangeType(VT_I2);

无论这是否是原因,您通常不希望对旧的COM主机使用像
VT\u UINT
这样的类型
VT_I4
应该是正确的。@romar。您可能是对的,但当我将wscript.exe进程附加到Visual Studio调试器并检查状态时,它说
wscript.exe已触发断点。发生在崩溃对话框出现之前。
:-(@ Roalr。尝试用<代码> VTYI4/C++ >,同样的事情发生了。我可以和你共享这个完整的代码吗?这是一个好主意,因为你的问题现在的形式还没有很好的定义。en函数传递一个
BSTR
123456Hello
一样的值,并尝试转换为
无符号int
,并且不再有断点。:-)