.NET/COM异常与IRTDUpdateEvent
我们构建了一个RTD服务器组件,已经广泛使用了几年。(它是用VS 2008、.NET 3.5目标运行时构建的。)今天,一位用户报告出现以下异常: System.InvalidCastException:无法强制转换类型为的COM对象 “System.\uuuu 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() 他昨天跑得很好。这个问题似乎是由于他安装了一个新的应用程序,这促使他安装了一个.NET4更新。(他已经安装了.NET 4,所以不确定这个更新是什么。)用户通过回滚到昨天的还原点(仍然运行.NET 4)解决了这个问题。但是我们需要了解在安装过程中会发生什么,从而导致COM兼容性问题。(他没有接触Excel或我们的RTD应用程序).NET/COM异常与IRTDUpdateEvent,.net,excel,com,rtd,.net,Excel,Com,Rtd,我们构建了一个RTD服务器组件,已经广泛使用了几年。(它是用VS 2008、.NET 3.5目标运行时构建的。)今天,一位用户报告出现以下异常: System.InvalidCastException:无法强制转换类型为的COM对象 “System.\uuuu ComObject”到接口类型 “Microsoft.Office.Interop.Excel.IRTDUpdateEvent”。这次手术 失败,因为对的COM组件的QueryInterface调用失败 与IID{A43788C1-D91
是否有可能其中一个安装使用了其他COM类的IRTDUpdateEvent的Guid?另一篇文章对此进行了回答:
问题似乎在于使用Excel 2003的计算机创建此COM对象的方式与使用Excel 2007的计算机创建此COM对象的方式之间存在差异。另一篇文章对此进行了回答:
问题似乎在于使用Excel 2003的计算机创建此COM对象的方式与使用Excel 2007的计算机创建此COM对象的方式不同。我认为您可能会出现此错误的原因是,您在Excel所在线程以外的线程上调用UpdateNotify 这里描述了解决这一问题的好方法
我认为您出现此错误的原因可能是因为您在Excel所在线程以外的线程上调用UpdateNotify 这里描述了解决这一问题的好方法
Hmm,不,.NET更新不会导致COM转换错误。对Office PIA或注册表造成干扰的应用程序安装人员当然会这样做。@Hans:诊断这一问题的正确方法是搜索注册表,看看是否有其他类注册了异常中打印的IID({A43788C1-D91B-11D3-8F39-00C04F3651B8})?另一篇帖子回答了这个问题:嗯,没有,.NET更新不会导致COM转换错误。对Office PIA或注册表造成干扰的应用程序安装人员当然会这样做。@Hans:诊断这种情况的正确方法是搜索注册表,看看是否有其他类注册了异常中打印的IID({A43788C1-D91B-11D3-8F39-00C04F3651B8})?这在另一篇文章中得到了回答: