Как сравнить два BSTR или CComBSTR? - PullRequest
1 голос
/ 16 сентября 2009

Как правильно сравнить два CComBSTR? Я пытался использовать

 bool operator ==(
     const CComBSTR& bstrSrc 
 ) const throw( );

Однако он всегда возвращает false, даже если два ComBSTR одинаковы. Это не сработало правильно.

Нужно ли сначала преобразовывать CComBSTRs в строку ANSI, а затем использовать strcmp?

Спасибо!

-bc

Ответы [ 3 ]

6 голосов
/ 16 сентября 2009

Вы, вероятно, должны использовать VarBstrCmp.

РЕДАКТИРОВАТЬ: это действительно то, что делает CComBSTR::operator==, поэтому без дальнейшего контекста ваш код может быть неправильным.

2 голосов
/ 16 сентября 2009

BSTR (и, следовательно, CComBSTR) обычно являются строками Unicode. Вы можете использовать wcscmp () (или wcsicmp () для сравнения без учета регистра).

Остерегайтесь того, что инкапсулированный BSTR может иметь значение null, что является допустимым представлением пустой строки, и это следует рассматривать как особый случай, в противном случае ваша программа может столкнуться с неопределенным поведением (скорее всего просто сбоем).

0 голосов
/ 22 июля 2016
BSTRsAreEqual(BSTR bstr1, BSTR bstr2, VARIANT_BOOL* boolptrEqual)
{
   CString s1, s2;
   s1 = bstr1;
   s2 = bstr2; 
   if (s1 == s2) { 
      *boolptrEqual = true;   
   } else { 
      *boolptrEqual = false;    
   }
}
...