从自定义 WinRT 组件报告错误的推荐方法是什么?

What is the recommended way to report errors from custom WinRT component?

我正在创作一个自定义 C++ WinRT 组件库以供第三方使用。我无法从我的库中确定 'best practices' 是什么 reporting/propagating 运行时错误条件。

我发现这篇文章详细介绍了处理异常和通过 HRESULT 跨 WinRT ABI 的最佳实践:https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/error-handling

但是我不清楚如何处理自定义(异常)错误。我想遵循现代 c++ 实践并抛出 std::runtime_errors,但 WinRT 文档说这是为将标准库错误映射到 'E_FAIL' HRESULT 而保留的。我是否应该遵循 COM 模型并实现自定义 HRESULT 值,只是为了抛出它们?

只需抛出一个 winrt::hresult_error,带有 hresult 代码和错误消息。你也可以抛出一个继承自它的异常。 cppwinrt 生成的代码会将您的异常转换为 HRESULT。