在C中调用COM时如何包装错误?
要遵循典型的COM过程,每当发生任何错误时,必须执行以下操作:
>检查失败或类似的HRESULT,看看是否发生错误.>创建一个变量来保存IErrorInfo(通常是CComPtr< IErrorInfo>)> Call :: GetErrorInfo(0,& var).> Get the human readable version of that by calling IErrorInfo::GetDescription.>将BSTR转换为std :: wstring.>将std :: wstring转换为某种形式的char const *.>抛出一个用户定义的异常类型,它派生自std :: exception,它暴露了上面的位1,5和6.
这一切似乎都是很多样板,它必须绕过COM中的每个函数调用.
我知道MSVC编译器提供了大量的东西,以便更容易搞乱COM,例如ATL,以及编译器特定的COM扩展_com_error,_com_raise_error等,但我不知道如何使用这些,或者如果它们是甚至打算供用户代码使用.
是否有任何典型策略用于在异常安全和竞争条件安全方式下管理此复杂性?