Я новичок в COM и должен создать оболочку COM для DLL C ++, чтобы сделать некоторые функции в нем доступными для управляемого кода. Я в основном следил этот учебник по проекту кода создать COM ATL DLL. Я создал шаг после сборки, который вызывает tlbimp.exe на COM-DLL для создания упаковки.
Добавление ссылки на dll, которую создает tlbimp.exe, работает, и я получаю завершение кода для методов на моей COM dll и могу скомпилировать управляемый код, использующий эту dll. Однако выполнение этого кода приводит к следующему исключению:
Unhandled Exception: System.Runtime.InteropServices.COMException: Retrieving the COM class factory
for component with CLSID {FD6F73D2-0208-455A-953A-C911EC2CAEAB} failed due to the following error:
80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//...
Если я правильно понимаю это исключение и документацию по MSDN, следующим шагом будет настройка части «без регистрации» COM-взаимодействия без регистрации. Я посмотрел на различные руководства, такие как этот а также этот, но я все еще не понимаю, что я должен делать.
Итак, мой вопрос:
Какие основные шаги мне нужно предпринять, чтобы моя недавно созданная .Net-совместимая COM-библиотека загружалась без регистрации?
Должен ли я написать манифест для моего приложения .Net, которое использует COM DLL?
Должен ли я написать манифест для моей COM DLL? Или DLL, которую tblimp.exe генерирует из него?
Я считаю, что вы не видите Isolated
свойство в обозревателе решений, поскольку вы вручную создали сборку Interop с помощью tlmbimp.exe, а затем добавили ее в проект.
Не делай этого. Удалите эту существующую ссылку, затем добавьте новую, где вы будете искать исходную неуправляемую COM DLL. В Справочном менеджере нажмите COM
слева нажмите Browse
нажмите кнопку, затем найдите и выберите неуправляемую COM DLL. Visual Studio сделает все остальное.
Других решений пока нет …