比较两个 CComBSTR 的正确方法是什么?我试着用
bool operator ==(
const CComBSTR& bstrSrc
) const throw( );
然而,即使两个 ComBSTR 相同,它也总是返回 false。它无法正常工作。
是否必须先将CComBSTR转换为 ANSI 字符串,然后再使用 strcmp?
谢谢!
-公元前
您可能应该使用VarBstrCmp
.
编辑:这实际上就是CComBSTR::operator==
这样做的,所以如果没有进一步的上下文,您的代码可能不正确。
BSTR(以及因此的 CComBSTR)通常是 Unicode 字符串。您可以使用 wcscmp() (或 wcsicmp() 进行不区分大小写的比较)。
请注意,封装的 BSTR 可以为 null,这是空字符串的合法表示,这应该被视为一种特殊情况,否则您的程序可能会遇到未定义的行为(很可能只是崩溃)。
要正确比较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;
}
}
BSTRsAreEqual(BSTR bstr1, BSTR bstr2, VARIANT_BOOL* boolptrEqual)
{
CString s1, s2;
s1 = bstr1;
s2 = bstr2;
if (s1 == s2) {
*boolptrEqual = true;
} else {
*boolptrEqual = false;
}
}