【问题标题】:.NET/COM Exception with IRTDUpdateEvent.NET/COM 异常与 IRTDUpdateEvent
【发布时间】:2011-12-11 05:01:41
【问题描述】:

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

System.InvalidCastException:无法转换类型的 COM 对象 'System.__ComObject' 到接口类型 'Microsoft.Office.Interop.Excel.IRTDUpdateEvent'。这个操作 失败,因为对 COM 组件的 QueryInterface 调用 由于 IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' 的接口失败 出现以下错误:不支持此类接口(异常来自 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 类?

【问题讨论】:

  • 嗯,不,.NET 更新不会导致 COM 转换错误。与 Office PIA 或注册表混淆的应用程序安装程序当然可以。
  • @Hans:诊断这个问题的正确方法是搜索注册表,看看是否有其他类注册了异常中打印的 IID ({A43788C1-D91B-11D3-8F39-00C04F3651B8} )?
  • 这在另一个帖子中得到了回答:stackoverflow.com/questions/10200154/…

标签: .net excel com rtd


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2012-11-05
      • 1970-01-01
      • 2013-12-09
      • 2011-08-08
      • 2012-02-28
      • 2014-04-23
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多