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

错误消息的示例是:

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

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

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

有帮助吗?

解决方案

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

其他提示

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

客户端的安全设置是什么?客户端的安全设置(Windows/操作系统设置或 PowerPoint/应用程序设置)很可能不允许您的插件通过 RPC 进行通信。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top