0

Win32_DiskDrive のインスタンスを取得し、その Size プロパティを取得する WMI クエリがある C/C++ コードの問題があります。このプロパティは Variant 型として取得され、失敗している UINT64 型に変換する必要があります。

バリアントの wchar 値をそのまま印刷すると、OK と印刷されます。しかし、UINT フォームのいずれかを印刷すると、文字化けした値が得られます。これは WinPE 環境にあり、何かに影響するかどうかはわかりません。

コード スニペットは次のとおりです。

VariantClear(&varPropVal);
hr = pInst->Get(L"Size", // property name
                0L,            // Reserved, must be zero.
                &varPropVal,   // property value returned.
                NULL,          // CIM type not needed.
                NULL);         // Flavor not needed.
if(hr == WBEM_S_NO_ERROR) 
{
    printf("Disk size: %S %llu %llu %u\n", V_BSTR(&varPropVal),
                                           V_UI4(&varPropVal),
                                           V_UI8(&varPropVal),
                                           V_UINT(&varPropVal));
    diskInfo->size = V_UI8(&varPropVal);
}

ログ ステートメントの出力: ディスク サイズ: 13440107520 4631112 4631112 4631112

ここで wchar* として出力される最初のサイズは正しいものです。

ここで見逃しているものはありますか?

4

1 に答える 1

0

プログラムの開始時にロケール (std::locale("")) を設定すると、問題が解決します。

于 2013-02-20T10:06:21.340 に答える