【问题标题】:VarCmp returning 0x80020008 (Bad variable type)VarCmp 返回 0x80020008(错误的变量类型)
【发布时间】:2012-01-25 19:42:19
【问题描述】:

我正在尝试使用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);

【问题讨论】:

    标签: visual-c++ variant hresult


    【解决方案1】:

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

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

    【讨论】:

    • 是的,Visual Basic 不支持的所有类型。
    • 我也在 Windows 7 下观察到这种行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多