gpt4 book ai didi

c++ - 使用 _bstr_t 时无效的空指针

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:54 25 4
gpt4 key购买 nike

我有一个正在开发的 COM DLL,但遇到了一些问题。我有一个 try catch 围绕一个代码块,在 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;
}

最佳答案

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

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

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

关于c++ - 使用 _bstr_t 时无效的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com