VarCmp返回0x80020008(错误变量类型)

时间:2012-01-25 19:42:20

标签: visual-c++ variant hresult

我正在尝试使用VarCmp函数比较VC ++中的两个VARIANT值:

VARIANT a;
VariantInit(&a);
a.vt = VT_UINT;
a.uintVal = 32;

VARIANT b;
VariantInit(&b);
b.vt = VT_UINT;
b.uintVal = 32;

HRESULT hr = VarCmp(&a, &b, LOCALE_USER_DEFAULT);

我希望VarCmp返回VARCMP_EQ,但它实际上返回0x80020008,“错误的变量类型”。这段代码出了什么问题?

编辑:我根据Joe的评论尝试了其他一些类型,并得到了一些令人惊讶的结果。

不起作用:

  • a.vt = VT_UINT; a.uintVal = 32;
  • CComVariant a((unsigned int)32);

使用:

  • a.vt = VT_I4; a.lVal = 32;
  • CComVariant a((long)32);

1 个答案:

答案 0 :(得分:1)

WINE页面上的一些有趣且可能相关的评论:“直到并包括WinXP的Native VarCmp不喜欢I1,UI2,VT_UI4,UI8和UINT作为输入变体.INT仅被接受为左变体。”

http://source.winehq.org/WineAPI/VarCmp.html