如何比较两个BSTR或CComBSTR?

时间:2009-09-15 22:57:21

标签: c++ com atl

比较两个CComBSTR的正确方法是什么?我试着用

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

然而,即使两个ComBSTR是相同的,它总是返回false。它无法正常工作。

我是否必须首先将 CComBSTRs 转换为ANSI字符串,然后使用strcmp?

谢谢!

-bc

3 个答案:

答案 0 :(得分:6)

您应该使用VarBstrCmp

编辑:这实际上是CComBSTR::operator==的作用,因此如果没有进一步的上下文,您的代码可能不正确。

答案 1 :(得分:2)

BSTR(以及CComBSTR)通常是Unicode字符串。您可以使用wcscmp()(或wcsicmp()进行不区分大小写的比较)。

请注意,封装的BSTR可以为null,这是空字符串的合法表示,这应该被视为特殊情况,否则您的程序可能会遇到未定义的行为(很可能只是崩溃)。

答案 2 :(得分:-1)

BSTRsAreEqual(BSTR bstr1, BSTR bstr2, VARIANT_BOOL* boolptrEqual)
{
   CString s1, s2;
   s1 = bstr1;
   s2 = bstr2; 
   if (s1 == s2) { 
      *boolptrEqual = true;   
   } else { 
      *boolptrEqual = false;    
   }
}