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



我正在尝试使用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,"错误的变量类型"。这段代码怎么了?

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

不起作用:

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

作品:

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

WINE页面上的一些有趣且可能相关的评论:"包括WinXP在内的Native VarCmp不喜欢I1、UI2、VT_UI4、UI8和UINT作为输入变体。INT仅作为左变体接受。"

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

相关内容

  • 没有找到相关文章

最新更新