Я пишу сборку C #, которая вызывается из процесса x64 (SS Reporting Services) и должна использовать стороннюю сборку COM x86.
Когда я компилирую свою сборку как x64, я получаю исключение COM "Класс не зарегистрирован", как только сделан первый вызов к сборке COM.
Следуя совету здесь (извините, если моя терминология неверна) Я создал новое приложение COM + и добавил компоненты, найденные в сборке COM, на которую я ссылаюсь. Когда я запускаю свою сборку как x64, она делает несколько успешных вызовов COM-сборки, пока не получит эту ошибку:
Невозможно привести объект COM типа «TRIMSDK.RecordTypesClass» к типу интерфейса «TRIMSDK.IBaseObjects». Эта операция завершилась неудачно, поскольку вызов QueryInterface в компоненте COM для интерфейса с IID '{8A354545-6BCB-11D3-B273-00A0C9FC3DC0}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .
'TRIMSDK.RecordTypesClass' реализует 'TRIMSDK.IBaseObjects' в соответствии с определением класса.
Если я ищу в реестре идентификатор GUID интерфейса из сообщения об ошибке или «IBaseObjects», совпадений не найдено. После создания приложения COM + я получаю ту же ошибку в режиме x86 (что, я думаю, имеет смысл), хотя до этого все работало нормально в x86.
Итак, я предполагаю, что интерфейс «TRIMSDK.IBaseObjects», который я пытаюсь использовать, не регистрируется как штука COM +, и я не знаю, почему или как это исправить.
Есть идеи? Заранее спасибо.
Обновление: Я думаю, что получаю исключение E_NOINTERFACE для TRIMSDK.IBaseObjects, потому что атрибут TypeLibType в интерфейсе установлен только на «FNonExtensible», тогда как другие интерфейсы, которые я успешно использую в сборке, также имеют « FDispatchable. Можно ли обойти эту ошибку (либо изменяя библиотеку типов, либо вручную регистрируя интерфейс 'IBaseObjects')?