Когда вы пишете код в 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, как обычно.
+1 Я думаю, что это был хороший вопрос, даже если никто не проголосует за вас. :) – Dusty