1

我们构建了一个已广泛使用多年的 RTD 服务器组件。(它是使用 VS 2008、.NET 3.5 目标运行时构建的。)今天有用户报告收到以下异常:

System.InvalidCastException:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Excel.IRTDUpdateEvent”。此操作失败,因为 IID 为“{A43788C1-D91B-11D3-8F39-00C04F3651B8}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) . 在 Microsoft.Office.Interop.Excel.IRTDUpdateEvent.UpdateNotify() 在 EZomsRTDServer.RTDServer.NotifyExcel()

他昨天跑得很好。该问题似乎是由于他安装了一个新应用程序导致他安装了 .NET 4 更新。(他已经安装了 .NET 4,所以不确定这个更新是什么。)用户通过回滚到昨天的还原点(仍然在运行 .NET 4)解决了这个问题。但是我们需要了解在安装过程中可能发生了什么导致 COM 兼容性问题。(他没有接触 Excel 或我们的 RTD 应用程序)。

是否有可能其中一个安装将 IRTDUpdateEvent 的 Guid 用于其他一些 COM 类?

4

2 回答 2

1

我认为您可能会收到此错误的原因是因为您在 Excel 所在的线程之外的线程上调用 UpdateNotify。

http://weblogs.asp.net/kennykerr/Rtd8

这里描述了一个解决这个问题的好方法。

https://stackoverflow.com/a/24422419/949779

于 2014-11-18T23:37:53.487 回答
0

这在另一篇文章中得到了回答: .NET RTD/COM Excel Interop errors on one user's machine?

问题似乎在于使用 Excel 2003 的机器创建此 COM 对象的方式与使用 Excel 2007 的机器创建它的方式之间存在差异。

于 2012-09-14T15:59:34.570 回答