Исключение .NET / COM с IRTDUpdateEvent - PullRequest
1 голос
/ 19 октября 2011

Мы создали сборку RTD-сервера, которая широко использовалась в течение нескольких лет. (Он был построен с VS 2008, .NET 3.5 Target Runtime.) Сегодня пользователь сообщил, что получил следующее исключение:

System.InvalidCastException: невозможно преобразовать COM-объект типа 'System .__ ComObject' для типа интерфейса 'Microsoft.Office.Interop.Excel.IRTDUpdateEvent. Эта операция не удалось, потому что вызов QueryInterface на компонент COM для сбой интерфейса с IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' на следующую ошибку: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)). в Microsoft.Office.Interop.Excel.IRTDUpdateEvent.UpdateNotify () в EZomsRTDServer.RTDServer.NotifyExcel ()

Он работал нормально вчера. Кажется, проблема была вызвана тем, что он установил новое приложение, которое побудило его установить обновление .NET 4. (У него уже был установлен .NET 4, поэтому не уверен, что это за обновление.) Пользователь решил проблему, откатившись до вчерашней точки восстановления (на которой все еще работал .NET 4). Но нам нужно понять, что могло произойти во время установки, чтобы вызвать проблему совместимости COM. (Он не трогал Excel или наше приложение RTD).

Возможно ли, что одна из инсталляций использовала Guid из IRTDUpdateEvent для какого-то другого класса COM?

Ответы [ 2 ]

1 голос
/ 19 ноября 2014

Я думаю, причина того, что вы можете получить эту ошибку, заключается в том, что вы вызываете UpdateNotify в потоке, отличном от того, в котором включен Excel.

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

Хороший способ решения проблемыэто описано здесь.

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

0 голосов
/ 14 сентября 2012

На это ответили в другом посте: .NET RTD / COM Excel Interop ошибки на компьютере одного пользователя?

Похоже, проблема заключалась в различиях между тем, как машина с Excel 2003 создавала этот COM-объект, и тем, как машина с Excel 2007 создавала его.

...