COMException导致“;对象引用未设置为对象的实例”;

本文关键字:对象 实例 导致 对象引用 COMException 设置 | 更新日期: 2023-09-27 18:27:29

我正在使用一个名为"Aspen Custom Modeler"的专有化学模拟包。(ACM)ACM本身有一个COM接口,可以用来驱动它。AspenTech希望使用Visual Basic与ACM交互,但我不太喜欢VB,所以选择了C#。这给我带来了各种各样的麻烦。

我的最新问题是,ACM将为正常使用中可能出现的简单错误抛出异常。我有一个数据集无法聚合。ACM抛出COMException,STS_F_Failure。在Visual Basic中,我得到了正确的类型,但在C#中,由于某种原因,我得到一个"对象引用未设置为对象实例"的异常。

我的猜测是互操作库没有正确的异常类型。有人知道我如何获得正确的异常类型吗?

COMException导致“;对象引用未设置为对象的实例”;

CLR将尽最大努力使COM对象看起来像.Net对象,尤其是在异常方面。它将检查具体的HRESULT值,查阅IErrorInfo等信息。。。以便确定表示故障的最佳.Net方式。

在这种情况下,它似乎选择了一个NullReferenceException,这意味着该方法很可能返回了一个看起来像E_POINTER的值。

控制这种情况充其量是困难的。唯一真正的选择是生成.Net库,使其使用HRESULT返回而不是异常。如果这是不可能的,或者根本不可替代的,那么我建议在这里简单地捕捉NullReferenceException

这篇文章很好地解释了这种映射是如何发生的

  • http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx