在MessageBox中显示变体类型值

时间:2012-08-22 14:57:57

标签: c++ directshow win32com

实际上我有一个小问题,我希望能够看到我的插入设备列表 我想在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();
}

其次,如何能够从设备切换到另一个设备。从 无论菜单还是列表

1 个答案:

答案 0 :(得分:3)

您需要拨打MessageBoxW而不是MessageBox。并删除演员阵容。所以它看起来像:

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

这是字符编码的问题; COM中使用的字符串类型为BSTR,可以与PWSTR / PCWSTR类型相同使用。这与PCSTR不兼容。

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