我正在使用名为“Aspen Custom Modeler”的专有化学模拟软件包。 (ACM)ACM natiely有一个COM接口,你可以用来驱动它。 AspenTech希望使用Visual Basic与ACM进行交互,但我不喜欢VB,而是使用C#。这给我带来了各种各样的麻烦。
我最新的问题是,即使在正常使用中可能出现的简单错误,ACM也会抛出异常。我有一个无法收敛的数据集。 ACM抛出COMException,STS_F_Failure。在Visual Basic中,我得到了正确的类型,但是在C#中,由于某种原因,我得到了“未将对象引用设置为对象的实例”异常。
我的猜测是Interop库没有正确的异常类型。有没有人知道我可以获得正确的例外类型?
答案 0 :(得分:1)
CLR最好使COM对象看起来像.Net对象,特别是异常方面。它将检查特定的HRESULT
值,查询IErrorInfo
等信息,以确定最佳 .Net方式来表示失败。
在这种情况下,它似乎选择NullReferenceException
,这意味着该方法很可能返回一个看起来像E_POINTER
的值。
控制这一点至多是困难的。您唯一真正的选择是生成.Net库,使其使用HRESULT
返回而不是异常。如果那是不可能的,或者根本不是苍白的,那么我建议只是在这里抓住NullReferenceException
。
本文对此映射的发生方式进行了很好的解释