Можно ли использовать без регистрации COM с Dotnet взаимодействия и C #?Если да, то как добавить ссылку на COM-объект в проект C #?
У меня есть dll COM-сервер ATL без регистрации со встроенным манифестом и двумя тестовыми клиентами, один cpp другой c #.Клиент cpp правильно ссылается на COM-объект, используя оператор импорта и либо
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
, либо установив 'Дополнительные зависимости манифеста' в 'type =' win32 'name =' TestComSvr1 'version =' 1.0.0.0 '"в параметрах Linker-> Manifest File, после чего клиент cpp будет работать правильно, если COM-компонент находится в одном каталоге.
Клиент c #, однако, вообще отказывается играть.
Попытка добавить ссылку на файл либо на незарегистрированный компонент COM dll, либо на незарегистрированный tlb приводит к ошибке:
"Невозможно добавить ссылку на" бла-бла ". Убедитесь, что файлдоступен, и что это допустимая сборка или компонент COM ".
Регистрация только библиотеки типов с помощью regtlib TestComSvr и последующее создание ссылки на файл или COM, что приводит к проекту c #не удается построить с:
"Ошибка загрузки библиотеки типов / Dll. (Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)) ".
Регистрация компонента COM и создание ссылки обычно в проекте c #, установка ссылки на Isolated, создание проекта c #, затем отмена регистрации компонента и запуск проекта c # приводят к этомуисключение:
Получение фабрики классов COM для компонента с CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSOT)).
Примечание. Даже если бы это сработало, это было бы бесполезно, так как в конечном итоге все еще требуется регистрация компонента, я просто проверил его на тщательность.
До сих пор единственный способ, которым я вообще мог ссылаться на COM-объект из C #, - это зарегистрировать сам COM-объект, который, конечно, полностью побеждает точку с тех пор, как он вообще не является reg-free.
У кого-нибудь есть идеи?
(Это на WinXP с VS2010 sp1).