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 中使用的字符串是 typeBSTR的,可以和PWSTR/ PCWSTRtypes 一样使用。这与PCSTR.

请记住,强制转换只是告诉编译器“嘿,我知道我在做什么,闭嘴”。除了编译器的消息实际上试图帮助您之外,您告诉他们离开。下次听他们的。

于 2012-08-22T15:00:58.113 回答