VarCmp возвращает 0x80020008 (неверный тип переменной) - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь сравнить два значения 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 Ответ

1 голос
/ 26 января 2012

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

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

...