Как использовать Reg-Free COM для ссылки DLL vb6 в проекте .net? - PullRequest
4 голосов
/ 01 мая 2009

Я давно пытаюсь решить эту проблему, и, похоже, ничего не получается.

У меня есть COM DLL, написанная на vb6. Я добавляю ссылку на эту DLL-библиотеку в .net, где для свойств «isolated» и «copy local» установлено значение true. Видимо это должно включить reg-free com.

Но это не работает. Если я пытаюсь на другом компьютере или отменить регистрацию библиотеки DLL с помощью regsvr32, при попытке доступа к библиотеке DLL возникает исключение (по сути говоря, требуемый класс com не существует). Файлы DLL и манифеста находятся в той же папке, что и EXE, но, очевидно, они просто полностью их игнорируют.

Что я делаю не так? Я прочитал тонну разбросанных статей об этом, но ни одна из них не дает мне работающего решения. Я возился с визуальной студией безрезультатно. Я сделал небольшое количество с make-my-manifest, но это не сработало (даже в тестовом проекте).

Ответы [ 4 ]

4 голосов
/ 24 мая 2009

Я создавал и использовал класс 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, многопоточный тест не пройден, хотя обычный тест все равно будет успешным. Похоже, это будет огромной болью для обхода.

3 голосов
/ 01 мая 2009

Я почти уверен, что когда вы ссылаетесь на COM-компоненты таким образом, импорт COM-компонентов происходит каждый раз, когда вы строите. Это означает, что COM-компонент должен быть зарегистрирован традиционным способом на каждой машине, на которой будет построен проект.

2 голосов
/ 01 мая 2009

Вот выдержка из раздела Устранение неполадок в MSDN статья о рег-COM. Извиняюсь, если вы уже видели это. Хорошая новость в том, что вы уже прошли через все шаги. Он предлагает воспроизвести проблему в Windows Server 2003 (может быть, с Virtual PC ?), И тогда должен помочь журнал событий.

Сначала получите ... ваш клиент работает с зарегистрированный сервер; затем отменить регистрацию сервер и убедитесь, что ваша ошибка сообщение то, что вы ожидали; а также наконец ... создать и развернуть манифест файлы. Таким образом, ваше устранение неполадок усилия ... будут ограничены структура ваших файлов манифеста (и правильное встраивание сборки манифест, если вы решите это сделать).

При устранении неполадок без регистрации Проблемы с COM, Event Viewer включен Windows Server 2003 ваш друг ... посмотрите в журнале системных событий события от COM-сервера. Я не предлагаю вам взглянуть на Журнал событий Windows XP ... он всегда будет содержать сообщение ... которое не помогает выявить проблему.

2 голосов
/ 01 мая 2009

Вот ссылка , в которой описывается использование бесплатного взаимодействия. Если вы уже сделали это, пожалуйста, отправьте файл манифеста. Возможно, вы опечатали пропавшего без вести.

Редактировать

Просто мысль может быть проще - зарегистрировать dll при первом запуске приложения на новом компьютере. Бесплатная регистрация для взаимодействия доступна только в Windows XP и новее, поэтому, если вы нацелены на динозавров, это не сработает.

...