使用_bstr_t时无效的空指针

时间:2012-08-23 13:29:05

标签: c++ string exception com bstr

我正在开发一个COM DLL,我遇到了一些问题。我试着捕捉一段代码,然后在catch中我从异常中获得_bstr_t。我想要做的是捕获该异常并将其打印到字符串,但是,当抛出该异常时,它会向我抛出一个无效的空指针错误。我试着在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;
} 

1 个答案:

答案 0 :(得分:0)

由于if条件中的错误,仅当ConvertBSTRToMBS为空时才会调用bstr。 纠正如下

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

奇怪的!!desc表达式意味着!(desc.operator!())。 如果_bstr_t::operator!为空,则BSTR返回true,因此您必须将其否定以检查非空。