У меня есть сторонний COM-объект (32-битный), который мне нужно вызвать из моего приложения c # (64-битный).
Я знаю, что должен запустить объект COM в отдельном процессе.
В этом COM-объекте реализовано много классов, поэтому я стараюсь избегать написания собственной оболочки удаленного взаимодействия, которая предоставляет все методы. COM + кажется наиболее простым решением. Я открыл меню «Службы компонентов», создал новое приложение COM +, добавил свой COM-объект в качестве компонента в это приложение. Казалось, все прекрасно импортируется.
В моем приложении на C # я добавил исходный COM-объект в качестве ссылки (который автоматически генерирует библиотеку типов). Используя ссылку на библиотеку типов, я могу создавать объекты из компонента COM + (я вижу, что они начинают вращаться в окне Службы компонентов), но когда я пытаюсь получить доступ к методам объекта, я получаю сообщение об ошибке, сообщающее об интерфейсе не зарегистрирован.
У кого-нибудь есть подсказка? Я вернулся и запустил regsvr32 на COM-объекте, но я не думаю, что это было необходимо, и это не помогло.
Правильно ли мое использование в C #? У автозаполнения VS2008 не было проблем с просмотром этих методов.
Точное исключение:
«Интерфейс не зарегистрирован (исключение из HRESULT: 0x80040155)»
Неясно, что конкретно представляют собой разрешения и роли в Службах компонентов, я попытался настроить удостоверение объекта COM + для запуска под Системной учетной записью как в качестве локальной службы, так и в качестве интерактивного пользователя. Я добавил каждого пользователя в роли.
Все работает локально, поэтому не должно быть проблем с правами доступа к файлам или чем-то подобным.
Я также хочу повторить, что этот COM-объект содержит много классов. Я успешно создал один объект класса в моем клиенте и установил некоторые значения свойств.
Я также успешно создал другой объект класса, но получил это исключение при попытке вызвать метод этого второго объекта .... поэтому я не думаю существует проблема, с которой в реестре зарегистрирован мой COM-объект в.