1

開発中のCOMDLLがあり、いくつかの問題が発生しています。コードのブロックをキャッチしてみましたが、キャッチで_bstr_t例外から取得しました。私がやりたかったのは、その例外をキャッチして文字列に出力することでしたが、その例外がスローされると、無効な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;
} 
4

1 に答える 1

0

if条件の誤りにより、が nullConvertBSTRToMBSの場合にのみ呼び出されます。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 に答える