C # COM Office Automation - RPC_E_SYS_CALL_FAILED - PullRequest
5 голосов
/ 19 сентября 2008

Я пишу программу на 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 ()

К сожалению, проблема возникает на компьютере клиента, поэтому у меня нет простого способа отладить его! Должен ли я просто повторять вызовы всякий раз, когда я получаю эту ошибку?

Буду очень признателен за любой совет, который поможет мне решить эту проблему!

Ответы [ 4 ]

5 голосов
/ 27 ноября 2008

Я не знаю, связано ли это с вашей проблемой, но все ваши COM-вызовы должны поступать из того же потока, в котором была создана ваша надстройка. Если вы создали новые темы, вы должны быть особенно внимательны. Подробности описаны в этих двух статьях:

0 голосов
/ 27 ноября 2008

Это может очень легко произойти, если вы делаете какие-либо вызовы объектной модели Powerpoint из фонового потока. Один правдоподобный сценарий имеет таймер, который периодически проверяет какое-то значение состояния. Если при срабатывании таймера Powerpoint занят (например, открыто диалоговое окно), вызов не будет выполнен.

В этой статье Microsoft дается обзор поддержки многопоточности в Office: http://msdn.microsoft.com/en-us/library/8sesy69e.aspx

0 голосов
/ 24 октября 2008

Какие настройки безопасности у клиента? Вполне возможно, что настройки безопасности клиента (либо настройки Windows / OS, либо настройки PowerPoint / App) не позволят подключаемому модулю взаимодействовать через RPC.

0 голосов
/ 19 сентября 2008

вы делаете вызов из потока с установленным ApartmentState? если нет, то это может быть причиной - COM-взаимодействие довольно придирчиво к такого рода вещам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...