0

ええと、実際には小さな問題があります。接続されたデバイスのリストを表示できるようにしたいのですが、MessageBox() の最初の場所でそれらを表示したいのですが、このバリアントは私をいらいらさせます (^_^) 私は多くの方法を試しましたが、なしで結果

    IMoniker *tmpMonk=NULL;
ULONG done;
VARIANT varName;
while(this->deviceClassEnum->Next(1,&tmpMonk,&done)==S_OK)
{
    IPropertyBag *tmpBag=NULL;
    tmpMonk->BindToStorage(0,0,IID_IPropertyBag,(void **)&tmpBag);
    VariantInit(&varName);
    checkIt(tmpBag->Read(L"FriendlyName",&varName,0));
            // this i wana see what is inside but huuuuuuuuuuuuuh
    MessageBox(this->app,TEXT((LPCSTR)varName.bstrVal),"",NULL);
    VariantClear(&varName);
    tmpBag->Release();
}

第二に、デバイスから別のデバイスに切り替える方法。メニューやリストから

4

1 に答える 1

3

MessageBoxWの代わりに呼び出す必要がありますMessageBox。そしてギプスを外します。したがって、次のようになります。

MessageBoxW(this->app, varName.bstrVal , L"", NULL);

これは文字エンコーディングの問題です。COM で使用される文字列は typeであり、 /型BSTRと同じように使用できます。これは と互換性がありません。PWSTRPCWSTRPCSTR

キャストは単にコンパイラに「自分が何をしているのか分かっている、黙れ」と伝えるだけであることを思い出してください。コンパイラのメッセージが実際にあなたを助けようとしていたことを除いて、あなたは彼らに立ち去るように言いました. 次回は彼らの話を聞いてください。

于 2012-08-22T15:00:58.113 に答える