簡體   English   中英

使用_bstr_t時無效的空指針

[英]Invalid null pointer when using _bstr_t

我有一個正在開發的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;
} 

由於if條件中的錯誤,僅當bstr為null時才調用ConvertBSTRToMBS 糾正如下

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

奇怪的!!desc表達式的意思是!(desc.operator!()) _bstr_t::operator! 如果BSTR為null,則返回true,因此必須將其取反以檢查非null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM