使用_bstr_t时无效的空指针
Invalid null pointer when using _bstr_t
我有一个正在开发的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。
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- C++ 调试断言失败,无效的空指针
- 正则表达式 & 无效的空指针表达式
- 使用_bstr_t时无效的空指针
- 调试断言失败:无效的空指针
- 无效的空指针 - C++
- 使用ifstream时出现无效的空指针错误
- 转换std::chrono::system_clock::time_point::min()为字符串时,无效空指针错误
- 调试断言失败!无效空指针错误
- c++断言中的未定义行为:访问无效/空指针
- 调试断言失败(无效空指针)默认字符串参数
- xString 中的空指针无效
- 无效空指针- c++ - VS2010