5

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

错误消息的示例是:

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

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

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

4

4 回答 4

5

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

于 2008-11-26T21:48:11.380 回答
0

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

于 2008-09-19T04:22:47.133 回答
0

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

于 2008-10-24T18:16:01.917 回答
0

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

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

于 2008-11-26T22:26:25.670 回答