我正在编写COM Interop .NET程序集(COM Callable Wrapper),我试图了解将.NET程序集中发生的错误传递给COM客户端/使用者的正确方法。我不确定这会非常改变我的问题,但是这个特定的.NET程序集正在使用现有的开源FTP库并向COM公开它的一部分功能。在大多数情况下,它是一个简单的“哑”包装。
我猜测编写错误处理的最佳方法是在.NET程序集中包含公共OnError事件,COM客户端/使用者可以使用它来订阅错误事件。然后由COM中的一个编程来决定是否使用该事件以及如何处理它。这可能有点危险,因为COM程序员可以省略错误事件处理程序,并且不会意识到.NET程序集中发生的错误。因为这个.NET程序集应该是非常通用的,所以我很确定我不希望.NET程序集打开消息框或以其他方式处理错误,其中COM消费者几乎没有控制权。
有没有更好的方法来处理这种或某种标准方式?
答案 0 :(得分:1)
以标准的.NET方式执行此操作,抛出异常。 CCW包装器捕获它并将其转换为任何COM方法返回的HRESULT代码。它还实现了IErrorInfo,以便COM客户端可以很好地描述错误,不要忘记在异常构造函数中传递一个,除非它是一个明显的例外。他们很少是在他们被翻译的时候。
尽可能尝试使用标准的.NET异常类型。它们都已预设了自己的HResult属性值,尽可能映射到COM错误代码。如果需要自定义HRESULT,则使用COMException(string,int)构造函数。