【问题标题】:C# COM Office Automation - RPC_E_SYS_CALL_FAILEDC# COM 办公自动化 - RPC_E_SYS_CALL_FAILED
【发布时间】:2010-09-11 02:04:50
【问题描述】:

我正在编写一个用作 PowerPoint 2007 插件的 C# 程序。在某些机器上,对 PowerPoint 对象模型的某些调用会抛出带有消息 RPC_E_SYS_CALL_FAILEDCOMException。我找不到任何关于如何处理此错误或如何避免它的具体建议。从谷歌搜索来看,它看起来与消息队列或单线程公寓有关。还是我走远了?

错误信息示例:

系统调用失败。 (来自 HRESULT 的异常:0x80010100 (RPC_E_SYS_CALL_FAILED))
在 Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName()

不幸的是,问题出在客户的机器上,所以我没有简单的方法来调试它!我是否应该在收到此错误时重试调用?

任何帮助我解决此问题的建议将不胜感激!

【问题讨论】:

    标签: c# com ms-office


    【解决方案1】:

    我不知道这与您的问题有关,但您的所有 COM 调用必须来自创建外接程序的同一线程。如果您创建了新线程,则必须特别小心。这两篇文章中有详细描述:

    【讨论】:

    • 仅供参考,这些链接现在似乎指向错误的地方。两者似乎都指向“Andrew Whitechapel”的通用登录页面
    【解决方案2】:

    您是从设置了 ApartmentState 的线程进行调用吗?如果不是,那可能是罪魁祸首 - COM 互操作对这类事情非常挑剔

    【讨论】:

      【解决方案3】:

      客户端的安全设置是什么?客户端的安全设置(Windows/OS 设置或 PowerPoint/App 设置)很有可能不允许您的插件通过 RPC 进行通信。

      【讨论】:

        【解决方案4】:

        如果您从后台线程调用 Powerpoint 对象模型,这很容易发生。一种可能的情况是有一个计时器定期检查某种状态值。如果在计时器触发时,Powerpoint 正忙(例如打开了一个对话框),则呼叫将失败。

        这篇 Microsoft 文章概述了 Office 中的线程支持: http://msdn.microsoft.com/en-us/library/8sesy69e.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-13
          • 2015-05-01
          • 1970-01-01
          • 2020-09-19
          • 2013-08-23
          • 2010-12-17
          • 1970-01-01
          相关资源
          最近更新 更多