在COM +(VB)中处理自定义.Net异常?

时间:2008-11-06 15:03:08

标签: c# vb.net com interop com-interop

我即将开始编写一个将从VB COM +服务调用的.Net组件(新组件是一个DLL,它调用Web服务并根据响应返回)。我不确定如何处理调用VB中.Net代码中可能出现的错误情况。

我担心的两种错误是:

  • 如果不满足前提条件,我可能会抛出异常(例如,作为参数提供的开始日期在作为参数提供的结束日期之后不到3个月;我可能想要抛出StartDateNotValidException)
  • 可能作为webservice调用的一部分发生的异常(超时,404等)。

如果发生上述任何一种情况,我想向用户返回一些特定的反馈和/或将一些信息记录到日志中。我想过从.Net代码返回Int返回代码并避免异常,但调用VB代码最终可能会迁移到.Net,所以我想尽可能使用Exceptions。

我在MSDN上读到COM Interop会自动将标准库异常转换为HRESULT;有没有人有这方面的经验?这可以用于将自定义.Net异常转换为我可以在VB中处理的错误条件吗?

谢谢, 尼克

2 个答案:

答案 0 :(得分:1)

我确信我之前已经看过它,但这是我以前的工作,所以我无法检查细节。我认为我们从COMException继承了我们的异常类并设置了正确的ErrorCode(应该在非托管代码中将其翻译为HResult)。这非常好,因为您可以在非托管代码中使用HResult,并在托管客户端中正确处理类型异常。

如果确实有效,请告诉我。

答案 1 :(得分:0)

我最终使用以下方法:

  • 有一个很大的词典 映射我们的应用程序特定 我们的VB错误代码 特定于应用程序的C#自定义 例外
  • 编写一个方法,将C#异常转换为VB错误代码(和 反之亦然)
  • 从包含任何业务的方法返回一个字符串数组 发生的异常 方法调用(目前只有两个)

这样做的原因是,调整我们的异常树来扩展COMException会比较麻烦(比上面的方法更麻烦)。所以,我从未尝试从COMException继承并检查ErrorCode是否正确转换为HResult。

感谢您的建议,并为不尝试而道歉。