1

こんにちは、Visual Studio C++ 2010 を使用していますが、まだあまり得意ではありません。

IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
    bstr_t("WQL"), 
    bstr_t("SELECT * FROM Win32_ComputerSystem"),
    WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
    NULL,
    &pEnumerator);

if (FAILED(hres))
{
    cout << "Query for CS failed."
        << " Error code = 0x" 
        << hex << hres << endl;
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
    return 1;               // Program has failed.
}


// Get the data from the query 

IWbemClassObject *pclsObj;
ULONG uReturn = 0;

while (pEnumerator)
{
    HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
        &pclsObj, &uReturn);

    if(0 == uReturn)
    {
        break;
    }

    VARIANT vtProp;


    // Get the value of the Name property
    hr = pclsObj->Get(L"Manufacturer", 0, &vtProp, 0, 0);


    if (vtProp.bstrVal == "test")  //// HERE IS THE PROB HOW TO FIX HERE?I WANT TO SAY IF THE RESULT ="WHATEVER" THEN 

    wcout << "\Manufacturer : " << vtProp.bstrVal << endl; // or do stuff 

    VariantClear(&vtProp);

    pclsObj->Release();

エラー: error C2446: '==': no conversion from 'const char *' to 'BSTR' 私はまだ初心者で、これを解決する方法がわかりません。助けてください !!!

4

1 に答える 1

3

ここには少なくとも 2 つの問題があります。

  • BSTR は文字列のように見えますが、正確には C 文字列ではありません。詳細はこちらをご覧ください。そのため、違いには注意が必要です。

  • vtProp.bstrVal が C 文字列であってもvtProp.bstrVal == "test"、文字列の内容ではなくポインターのアドレスを比較するため、比較は機能しません。

コードのように単純な比較を行う場合、解決策はテストを次のように置き換えることです

wcscmp(vtProp.bstrVal, L"test")==0
于 2014-07-04T19:18:54.760 に答える