2

VARIANT関数を使用して VC++ の2 つの値を比較しようとしてい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);

戻ると思っていましたが、実際には 0x80020008、「変数の型が正しくありません」がVarCmp返されます。VARCMP_EQこのコードの何が問題になっていますか?

編集:ジョーのコメントに基づいて他のタイプをいくつか試してみたところ、驚くべき結果が得られました。

動作しません:

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

作品:

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

1 に答える 1

1

WINE ページの興味深い関連コメント: 「WinXP までのネイティブ VarCmp は、入力バリアントとして I1、UI2、VT_UI4、UI8、および UINT を好みません。INT は、左バリアントとしてのみ受け入れられます。」

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

于 2012-01-25T23:42:56.167 に答える