2011-04-08 50 views
1

我正在编写一个COM Interop .NET程序集(一个COM Callable Wrapper),我试图了解正确的方法是传递错误.NET程序集到COM客户端/客户端。我不确定这是否会改变我的问题,但是这个特定的.NET程序集正在使用现有的开源FTP库,并将它的一部分功能暴露给COM。大多数情况下,它是一个简单的“哑巴”包装。从.NET程序集到COM客户端/客户端的处理或传递错误

我猜测编程错误处理的最好方法是在.NET程序集内部有COM客户端/客户可以用来订阅错误事件的公共OnError事件。然后,由COM中的一个编程决定是否使用该事件以及如何处理它。这可能有点危险,因为COM程序员可以省略错误事件处理程序,并且不知道.NET程序集中发生的错误。因为这个.NET程序集应该是非常通用的,我敢肯定,我不希望.NET程序集引发消息框或以其他方式处理错误,而COM消费者几乎没有控制权。

有没有更好的方法来处理这个或一些标准的方式?

回答

1

这是标准的.NET方式,抛出一个异常。 CCW封装捕获它并将其转换为任何COM方法返回的HRESULT代码。它还实现IErrorInfo,以便COM客户端可以很好地描述错误,不要忘记在异常构造函数中传递一个,除非它是一个明显的异常。他们很少在他们翻译成btw时。

尽量尝试使用标准的.NET异常类型。他们都有自己的HResult属性值已经预设,尽可能映射到COM错误代码。如果您需要自定义HRESULT,则使用COMException(string,int)构造函数。

+0

这是有道理和工作。我仍然是.NET的新手,我猜想我在搞什么,我一直在看书和看教程,它们清楚地表明,每一段实际上做什么的代码都必须放在try/catch块中。我坐在这里想,现在我已经发现了这个例外,我该怎么办?然后我不得不想出一些疯狂的方案来传递它。这里的简单解决方案是删除我的try/catch块,以便将错误传递给COM客户端/客户端。 – HK1 2011-04-08 15:19:00