1

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

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

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

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

谢谢!

-公元前

4

4 回答 4

6

您可能应该使用VarBstrCmp.

编辑:这实际上就是CComBSTR::operator==这样做的,所以如果没有进一步的上下文,您的代码可能不正确。

于 2009-09-15T23:02:49.947 回答
2

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

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

于 2009-09-16T05:16:03.520 回答
0

要正确比较BSTR可能包含嵌入空字符的值,您需要使用以下内容:

bool EqualBSTR(const BSTR String1, const BSTR String2, bool IgnoreCase = false)
{
    if (String1 == nullptr || String2 == nullptr) {
        return false;
    }

    const size_t MaxCount = std::min(static_cast<size_t>(SysStringLen(String1)), static_cast<size_t>(SysStringLen(String2)));

    if (IgnoreCase) {
        return _wcsnicmp(String1, String2, MaxCount) == 0;
    } else {
        return wcsncmp(String1, String2, MaxCount) == 0;
    }
}
于 2022-02-25T14:15:30.253 回答
-2
BSTRsAreEqual(BSTR bstr1, BSTR bstr2, VARIANT_BOOL* boolptrEqual)
{
   CString s1, s2;
   s1 = bstr1;
   s2 = bstr2; 
   if (s1 == s2) { 
      *boolptrEqual = true;   
   } else { 
      *boolptrEqual = false;    
   }
}
于 2016-07-22T20:34:52.483 回答