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 呼び出しは、アドインが作成されたのと同じスレッド内から行われる必要があります。新しいスレッドを作成した場合は、特別な注意が必要です。詳細は、次の 2 つの記事で説明されています。

于 2008-11-26T21:48:11.380 に答える
0

クライアントのセキュリティ設定は何ですか? クライアントのセキュリティ設定 (Windows/OS 設定または PowerPoint/アプリ設定) によって、プラグインが RPC 経由で通信できない可能性があります。

于 2008-10-24T18:16:01.917 に答える
0

これは、バックグラウンド スレッドから Powerpoint オブジェクト モデルを呼び出すと、非常に簡単に発生する可能性があります。もっともらしいシナリオの 1 つは、ある種のステータス値を定期的にチェックするタイマーを使用することです。タイマーが起動したときに Powerpoint がビジー状態 (たとえば、ダイアログ ボックスが開いている) の場合、呼び出しは失敗します。

この Microsoft の記事では、Office でのスレッド サポートの概要について説明しています: http://msdn.microsoft.com/en-us/library/8sesy69e.aspx

于 2008-11-26T22:26:25.670 に答える
0

ApartmentState が設定されたスレッドから呼び出しを行っていますか? そうでない場合は、それが原因である可能性があります-COM相互運用は、その種のことについてかなり気難しいです

于 2008-09-19T04:22:47.133 に答える