У меня есть сборка 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 бит или что. Любые предложения приветствуются.
Вы уверены, что ссылка COM в файле VBP была идентична тому, когда приложение было скомпилировано? Если ссылка в VBP не соответствует интерфейсу, указанному в коде/сборке .NET, это может привести к этой ошибке. – DaveInCaz
У меня была/нет ссылки, я делаю последнее связывание CreateObject. Вот почему я скептически относился к попытке добавить ссылку tlb для начала. Weird. – Terry