使用_bstr_t时无效的空指针

Invalid null pointer when using _bstr_t

本文关键字:空指针 无效 bstr 使用      更新时间:2023-10-16

我有一个正在开发的COM DLL,遇到了一些问题。我在一个代码块周围有一个try-catch,在这个catch中,我从异常中得到一个_bstr_t。我想做的是捕获该异常并将其打印到字符串中,然而,当抛出该异常时,它会向我抛出一个Invalid null指针错误。我试着在MSDN上查看如何检查空指针,但它似乎不起作用。我真的无法调试错误,因为这是在客户端机器上,当我试图输出信息时,我会收到这个错误。

catch(const _com_error& ex)
{
    ::OutputDebugStringW(ex.Description());
    _variant_t ret;
    std::string str = "#N/A ExcelException: ";
    _bstr_t desc = ex.Description();
    if(!desc || desc.GetBSTR() == L"")
    {
        str += ConvertBSTRToMBS(desc);
    }
    ret.SetString(str.c_str());
    *Result = ret.Detach();
}
std::string ConvertBSTRToMBS(_bstr_t bstr) 
{
    std::string converted((char *)bstr);
    return converted;
} 

由于if条件中的错误,只有当bstr为空时才调用ConvertBSTRToMBS。按以下进行更正

if(!!desc && desc.length() != 0)
{
    str += ConvertBSTRToMBS(desc);
}

奇怪的!!desc表示!(desc.operator!())。如果BSTR为null,则_bstr_t::operator!返回true,因此您必须将其取反以检查是否为非null。