Подтвердить что ты не робот

Что такое dll interop?

Мне нужно уточнение. У меня есть DLL Reportwriter, который использует Crystal Reports. Это написано на VB6. Я должен добавить эту DLL в мой проект asp.net, где он создает dll interop.

Насколько я понимаю, interop dll существует как посредник, так что мой .net-код может разговаривать с DLL Reportwriter.

Так что я регистрирую DLL interop или регистрирую исходную dll?

4b9b3361

Ответ 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, как обычно.

Ответ 2

Хороший ответ от Павла. Кроме того, начиная с версии .NET Framework версии 4 вам не нужно развертывать сборку interop с вашим приложением - http://msdn.microsoft.com/en-us/library/tc0204w0.aspx

Ответ 3

Ты прав. Взаимодействующая DLL переносит вызовы на компонент VB6 и делает их прозрачными.

При регистрации DLL на компьютере вы будете запускать приложение, вам все равно нужно зарегистрировать DLL VB6. Взаимодействующая DLL будет размещать папку вашего приложения и маршал.

Ответ 4

Вам необходимо зарегистрировать dll VB6 и указать его в своем проекте .NET; эта ссылка создаст ваш Interop.dll