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 принимается только как левый вариант".