1

我有一个正在开发的 COM DLL,但遇到了一些问题。我对一段代码进行了尝试捕获,并且在捕获中我_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;
} 
4

1 回答 1

0

由于if条件错误,ConvertBSTRToMBS仅在bstr为空时调用。更正如下

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

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

于 2012-08-23T13:38:29.590 回答