Вопрос

Я пишу программу на C#, которая действует как плагин PowerPoint 2007.На некоторых машинах некоторые вызовы объектной модели PowerPoint вызывают ошибку. COMException с сообщением RPC_E_SYS_CALL_FAILED.Я не смог найти конкретных советов о том, что делать с этой ошибкой или как ее избежать.Судя по Google, это похоже на очередь сообщений или однопоточные апартаменты.Или я далеко?

Пример сообщения об ошибке:

Системный вызов не удался.(Исключение из 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