Comment comparer BSTR à une chaîne en c / c ++?
wprintf(L"Selecting Audio Input Device: %s\n",
varName.bstrVal);
if(0 == strcmp(varName.bstrVal, "IP Camera [JPEG/MJPEG]"))...
Les rapports ci-dessus :
error C2664: 'strcmp' : cannot convert parameter 1 from 'BSTR' to 'const char *'
source d'informationauteur COMer
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
wcscmp
à la place:Ici est un description de la BSTR type de donnéesil a une longueur de préfixe et d'un véritable chaîne de la partie qui est juste un tableau de WCHAR caractères. Il dispose également de 2 terminateur NULL.
La seule chose à surveiller est que le BSTR type de données peut contenir des valeurs Null incorporées dans la partie de chaîne, de sorte
wcscmp
ne fonctionne que dans le cas où le BSTR ne contient pas intégré les valeurs Null (ce qui est probablement la plupart des cas).De l'enrichissement alternative à la C runtime, vous pouvez utiliser l'Unicode CompareString ou CompareStringEx Api Win32. Si vous n'avez pas de jeu de caractères de questions à prendre en considération, wcscmp est fine.
J'ai toujours construire
_bstr_t
wrappers autour de Bstr. Cela rend les choses un peu plus facile et plus idiomatiques:Ma solution: