我正在开发一个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;
}
答案 0 :(得分:0)
由于if
条件中的错误,仅当ConvertBSTRToMBS
为空时才会调用bstr
。
纠正如下
if(!!desc && desc.length() != 0)
{
str += ConvertBSTRToMBS(desc);
}
奇怪的!!desc
表达式意味着!(desc.operator!())
。
如果_bstr_t::operator!
为空,则BSTR
返回true,因此您必须将其否定以检查非空。