1

数年間広く使用されている RTD サーバー アセンブリを構築しました。(これは VS 2008、.NET 3.5 ターゲット ランタイムでビルドされました。) 今日、あるユーザーから次の例外が報告されました。

System.InvalidCastException: タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Excel.IRTDUpdateEvent' にキャストできません。IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーのために失敗したため、この操作は失敗しました: No such interface supported (HRESULT からの例外: 0x80004002 (E_NOINTERFACE)) . Microsoft.Office.Interop.Excel.IRTDUpdateEvent.UpdateNotify() で EZomsRTDServer.RTDServer.NotifyExcel() で

彼は昨日元気に走っていた。この問題は、彼が .NET 4 更新プログラムをインストールするよう促した新しいアプリケーションをインストールしたことが原因であると思われます。(彼は既に .NET 4 をインストールしていたので、この更新が何であったかはわかりません。) ユーザーは昨日の復元ポイント (まだ .NET 4 を実行していた) にロールバックすることで問題を解決しました。しかし、COM 互換性の問題を引き起こすために、インストール中に何が起こった可能性があるかを理解する必要があります。(彼は Excel や RTD アプリケーションには触れませんでした)。

インストールの 1 つが他の COM クラスの IRTDUpdateEvent の Guid を使用した可能性はありますか?

4

2 に答える 2

1

このエラーが発生する理由は、Excel がオンになっているスレッド以外のスレッドで UpdateNotify を呼び出しているためだと思います。

http://weblogs.asp.net/kennykerr/Rtd8

これを解決する良い方法がここに記載されています。

https://stackoverflow.com/a/24422419/949779

于 2014-11-18T23:37:53.487 に答える
0

これは別の投稿で回答されました: .NET RTD/COM Excel Interop errors on one user's machine?

問題は、Excel 2003 を搭載したマシンがこの COM オブジェクトを作成する方法と、Excel 2007 を搭載したマシンがそれを作成する方法の違いにあるようです。

于 2012-09-14T15:59:34.570 に答える