Как использовать Reg-Free COM для ссылки DLL vb6 в проекте.net?
Я пытался решить эту проблему в течение длительного времени, и, кажется, ничего не работает.
У меня есть COM DLL, написанная на vb6. Я добавляю ссылку на эту DLL-библиотеку в.net, когда для свойств "isolated" и "copy local" установлено значение true. Видимо это должно включить reg-free com.
Но это не работает. Если я пытаюсь на другом компьютере или отменить регистрацию библиотеки DLL с помощью regsvr32, при попытке доступа к библиотеке DLL возникает исключение (по сути, говоря, что требуемый класс com не существует). Файлы DLL и манифеста находятся в той же папке, что и EXE, но, очевидно, они просто полностью игнорируют их.
Что я делаю неправильно? Я прочитал тонну разбросанных статей об этом, но ни одна из них не дает мне работающего решения. Я возился с визуальной студией безрезультатно. Я немного возился с make-my-manifest, но это не сработало (даже в тестовом проекте).
4 ответа
Я создавал и использовал класс com в не-пользовательском потоке. Очевидно, что Reg-Free com на библиотеках vb6 не работает в этой ситуации. Этот тестовый код показывает это:
Private Sub RunTest() Handles Button1.Click
Try
Dim x As New RegTestProject.RegTestCall
MsgBox(x.RegTestFunction())
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub RunThreadedTest() Handles Button2.Click
'fails if reg-free COM is used'
Dim t As New Threading.Thread(AddressOf RunTest)
t.Start()
End Sub
Когда я запускаю это с зарегистрированной DLL, оба теста завершаются успешно. Если я использую reg-free com, многопоточный тест не пройден, хотя обычный тест все равно будет успешным. Похоже, это будет огромной болью для обхода.
Я почти уверен, что когда вы ссылаетесь на COM-компоненты таким образом, импорт COM-компонентов происходит каждый раз, когда вы строите. Это означает, что COM-компонент должен быть зарегистрирован традиционным способом на каждой машине, на которой будет построен проект.
Вот ссылка, описывающая использование регистрации com. Если вы уже сделали это, пожалуйста, отправьте файл манифеста. У вас может быть опечатка вашего пропавшего без вести.
редактировать
Можно подумать, что проще зарегистрировать dll при первом запуске приложения на новом компьютере. Регистрация бесплатно com interopt доступна только в Windows XP и новее, поэтому, если вы нацеливаетесь на динозавров, это не сработает.
Вот выдержка из раздела " Устранение неполадок " в статье MSDN о рег-COM. Извиняюсь, если вы уже видели это. Хорошая новость в том, что вы уже прошли через все шаги. Он предлагает воспроизвести проблему в Windows Server 2003 (может быть, с Virtual PC?), И тогда должен помочь журнал событий.
Сначала получите... ваш клиент работает с зарегистрированным сервером; затем отмените регистрацию сервера и убедитесь, что ваше сообщение об ошибке соответствует ожидаемому; и наконец... создайте и разверните файлы манифеста. Таким образом, ваши усилия по устранению неполадок... будут ограничены структурой ваших файлов манифеста (и правильным внедрением манифеста сборки, если вы решите это сделать).
При устранении неполадок, связанных с проблемами COM без регистрации, программа просмотра событий в Windows Server 2003 - ваш друг... посмотрите в журнале системных событий события с COM-сервера. Я не советую вам просматривать журнал событий Windows XP... он всегда будет содержать сообщение... которое не помогает выявить проблему.