COM-объект взаимодействия создает InvalidCastException в одном проекте, но не в другом - PullRequest
2 голосов
/ 10 июля 2009

У меня есть COM-объект, который я импортировал в своем тестовом решении C #. Все работает нормально и продолжает это делать.

Затем я импортировал тот же COM-объект в мое реальное решение и в качестве теста реализовал точно такие же строки , что и в тестовом проекте.
Когда я запускаю реальный проект, я получаю InvalidCastException

Невозможно преобразовать COM-объект типа 'CTWebReport.WebReportCOMClass' в интерфейс типа 'CTWebReport.IWebReportCOM'. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{5DFA18E8-4E71-4ADC-A812-6B166C242561}' завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .

Я искал всю свою систему для каждой ссылки на библиотеку interop и com, включая все папки bin и obj, которые я мог найти. За исключением исходной библиотеки COM, я удалил их все и для хорошей очистки вычистил свою корзину.
Нет разницы, точно такая же ситуация. Тестовый проект работает, реальный проект - нет.

EDIT
Кажется, что COM работает в приложениях winforms, но не в моем классе librar (который используется веб-приложением asp.net mvc).

Я не знаю, что делать дальше. Предложения?

Ответы [ 2 ]

2 голосов
/ 14 июля 2009

Разница была в потоке. Поток winform выполнил код из основного потока, а asp.net - нет. Это было решено путем явного запуска COM в STAThread.

0 голосов
/ 14 июля 2009

Поскольку ваш COM-компонент работает в приложении WinForm, но не в ASP.NET, я думаю, что вы можете столкнуться с некоторыми проблемами с разрешениями. Можете ли вы временно повысить разрешения, под которыми работает ASP.NET (например, администратор), и посмотреть, сможете ли вы запустить компонент?

...