wprintf(L"Selecting Audio Input Device: %s\n",
varName.bstrVal);
if(0 == strcmp(varName.bstrVal, "IP Camera [JPEG/MJPEG]"))...
以上报告:
error C2664: 'strcmp' : cannot convert parameter 1 from 'BSTR' to 'const char *'
答案 0 :(得分:17)
您必须改为使用wcscmp
:
if(0 == wcscmp(varName.bstrVal, L"IP Camera [JPEG/MJPEG]"))
{
}
这是一个description of the BSTR data type,它有一个长度前缀和一个真正的字符串部分,它只是一个WCHAR字符数组。它还有2个NULL终止符。
唯一需要注意的是BSTR数据类型可以在字符串部分中包含嵌入的NULL,因此wcscmp
仅适用于BSTR不包含嵌入式NULL的情况(可能最多例)。
答案 1 :(得分:2)
作为C运行时的更丰富的替代品,您可以在Win32中使用Unicode CompareString或CompareStringEx API。如果你没有要考虑的字符集问题,wcscmp就好了。
答案 2 :(得分:0)
我总是在BSTR周围构建_bstr_t
个包装器。它使事情变得更容易和更惯用:
if(std::string("IP Camera [JPEG/MJPEG]") ==
static_cast<const char*>( _bstr_t(varName.bstrVal) )
{
}
答案 3 :(得分:0)
我的解决方案:
static const std::wstring IPCamera = L"IP Camera [JPEG/MJPEG]";
if (varName.bstrVal == IPCamera {
//...