VarCmp возвращает 0x80020008 (неверный тип переменной)

Я пытаюсь сравнить два VARIANT значения в VC++ с использованием VarCmp функция:

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, "неверный тип переменной". Что не так с этим кодом?

РЕДАКТИРОВАТЬ: Я попробовал некоторые другие типы на основе комментария Джо, и получил некоторые удивительные результаты.

Не работает:

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

Работает:

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

1 ответ

Решение

Некоторые интересные и, возможно, связанные комментарии на странице WINE: "Native VarCmp вплоть до WinXP не включает I1, UI2, VT_UI4, UI8 и UINT как варианты ввода. INT принимается только как левый вариант".

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

Другие вопросы по тегам