Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare BSTR against a string in c/c++?

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

if(0 == strcmp(varName.bstrVal, "IP Camera [JPEG/MJPEG]"))...

The above reports :

error C2664: 'strcmp' : cannot convert parameter 1 from 'BSTR' to 'const char *'
like image 437
COMer Avatar asked Sep 13 '10 13:09

COMer


People also ask

How do I compare Bstr strings?

The only thing to look out for is that the BSTR data type can contain embedded NULLs in the string portion, so wcscmp will only work in the cases where the BSTR does not contain embedded NULLs (which is probably most cases). Why some functions are prefixed with w while some are wc ?


2 Answers

You have to use wcscmp instead:

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

Here is a description of the BSTR data type, it has a length prefix and a real string part which is just an array of WCHAR characters. It also has 2 NULL terminators.

The only thing to look out for is that the BSTR data type can contain embedded NULLs in the string portion, so wcscmp will only work in the cases where the BSTR does not contain embedded NULLs (which is probably most cases).

like image 69
Brian R. Bondy Avatar answered Oct 24 '22 02:10

Brian R. Bondy


As a richer alternative to the C runtime, you could use the Unicode CompareString or CompareStringEx APIs in Win32. If you don't have charset issues to consider, wcscmp is fine though.

like image 29
Steve Townsend Avatar answered Oct 24 '22 01:10

Steve Townsend