Ответ 1
Когда вы пишете код в VB6, скомпилированный результат является COM-компонентом. Компоненты COM предоставляют интерфейсы, соклассы, структуры и перечисления, которые обычно описываются с использованием библиотеки типа COM. Однако, чтобы потреблять этот COM-компонент в .NET, вам нужно ввести описание типа в формате, который понимает .NET, то есть сборке .NET(поскольку он не может напрямую работать с библиотеками типов). Таким образом, сборка interop представляет собой просто "преобразованную" библиотеку COM-типа, в которой она содержит описания интерфейсов, структур и т.д., Которые соответствуют тем же вещам в библиотеке типов.
(Вышеприведенное несколько упрощено, так как сборку interop не нужно создавать из библиотеки типов - вы можете, например, вручную указать код, если хотите).
Вопреки тому, что часто говорят, сборка interop не содержит исполняемого кода, и он не выполняет никакого сортировки. Он содержит только определения типов, и единственное место, где он может иметь методы, - это интерфейсы, а методы в интерфейсах не имеют реализации. Маршалинские вызовы .NET для COM-пакетов на самом деле выполняются самим CLR на основе описаний типов, загружаемых из сборщиков interop - он генерирует весь необходимый код на лету.
Теперь о вашем вопросе. Вам необходимо зарегистрировать COM-DLL (выход вашего VB6) - например, используя regsvr32.exe
. Вы не должны (на самом деле, вы не можете) зарегистрировать сборку interop таким образом, потому что это не COM-компонент - это просто простая сборка .NET, поэтому вы можете либо поместить ее в ту же папку с вашим .exe/.dll, или поместить его в GAC, как обычно.