如何比较BSTR与c/c ++中的字符串?

COM*_*Mer 11 c++ windows com activex

wprintf(L"Selecting Audio Input Device: %s\n", 
                            varName.bstrVal);

if(0 == strcmp(varName.bstrVal, "IP Camera [JPEG/MJPEG]"))...
Run Code Online (Sandbox Code Playgroud)

以上报道:

error C2664: 'strcmp' : cannot convert parameter 1 from 'BSTR' to 'const char *'
Run Code Online (Sandbox Code Playgroud)

Bri*_*ndy 18

你必须使用wcscmp:

if(0 == wcscmp(varName.bstrVal, L"IP Camera [JPEG/MJPEG]"))
{
}
Run Code Online (Sandbox Code Playgroud)

这是BSTR数据类型描述,它有一个长度前缀和一个真正的字符串部分,它只是一个WCHAR字符数组.它还有2个NULL终止符.

唯一需要注意的是BSTR数据类型可以在字符串部分中包含嵌入的NULL,因此wcscmp仅适用于BSTR不包含嵌入式NULL的情况(可能是大多数情况).

  • @COMer:我猜"str"被"wcs"取代(例如strcmp - > wcscmp,strdup - > wcsdup),但没有"str"的函数会在某处插入"w"(例如printf - > wprintf,fopen - > _wfopen). (2认同)