2017-01-26 20 views
3

У меня есть сборка C#, которую мне нужно использовать в VB6. Я работал над предыдущими машинами/ОС, но на моем компьютере с Windows 10 я не могу заставить его работать при отладке в VB6/VS6 IDE. Всякий раз, когда я попал в линию:В приложении VB6 CreateObject для C# dll не удается выполнить «компонент ActiveX не может создать объект» только в IDE

Set interop = CreateObject("BTR.Core.Interop.Activator")

я получаю «компонент ActiveX не может создать объект». ошибка.

Если я запускаю скомпилированное приложение VB6, все работает. Таким образом, это проблема разрешения проблемы в отношении VB6/VS6 IDE.

Я нашел другие сообщения, в которых упоминалось, что необходимо использовать 32-битную версию regasm, и я пробовал как regasm, так и C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe безрезультатно.

Поскольку это работает, когда я запускаю скомпилированное приложение VB6 (и поскольку приложение и приложение VB6 работали на предыдущих машинах), я думаю, это доказывает, что все настройки для отображения моей C# dll на COM верны, Я с удовольствием копаю для более подробной информации об этом, если кто-то считает, что это уместно.

Только подозрительная вещь, которую я видел, заключалась в том, что этот пост (Late binding run-time error in VB6 when creating an object from a .NET assembly) рассказывает о том, что должно быть в реестре после запуска regasm. Все мои настройки находятся в ключе WOW6432NODE по адресу

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}.

Так что не уверен, что есть какой-то конфликт 32/64 бит или что. Любые предложения приветствуются.

+0

Вы уверены, что ссылка COM в файле VBP была идентична тому, когда приложение было скомпилировано? Если ссылка в VBP не соответствует интерфейсу, указанному в коде/сборке .NET, это может привести к этой ошибке. – DaveInCaz

+0

У меня была/нет ссылки, я делаю последнее связывание CreateObject. Вот почему я скептически относился к попытке добавить ссылку tlb для начала. Weird. – Terry

ответ

3

Ну, я нашел решение. Я не уверен, был ли он правильным. Но я нашел другие сообщения, похожие на эту проблему, которые говорили о запуске regasm с параметром /tlb для создания библиотеки типов, а затем ссылаются на VB6. Я не хотел иметь эту ссылку, когда я развернул приложение на другой машине, поэтому я проигнорировал этот совет.

Наконец, я решил попробовать использовать этот параметр и ссылаться на библиотеку типов, а затем отлаживать отладку VB6 IDE.

Но weird часть (и хорошо для меня) есть, я удалил ссылку и VB6 IDE продолжал работать. Поэтому каким-то образом добавление ссылки в VB6 «сделало» что-то, чтобы заставить работать при работе в среде IDE даже после удаления ссылки.

Надеюсь, что это поможет кому-то еще, кто может застрять, поддерживая приложения VB6 в новых операционных системах Windows.

+0

Проблема, вероятно, в том, что TLB не был зарегистрирован должным образом. Позднее обязательство зависит от этого, AFAIK. Шаг реглаза мог бы зафиксировать это. Также кажется, что иногда сама VB6 IDE регистрирует библиотеки DLL автоматически. Поэтому одна из этих двух вещей должна была это сделать. – DaveInCaz

+0

Это был бы VB6 ... Я сделал regasm, и он не работал, пока я не создал TLB и не добавил ссылки в VB6. – Terry

 Смежные вопросы

  • Нет связанных вопросов^_^