Вызов библиотеки классов VB.NET COM из VB6 ActiveX не работает

Прежде всего, я имею дело с устаревшим приложением VB6, которое создает «задания», вызывая (не ActiveX) C ++ DLL, которая запускает (вызывая CLSIDFromProgID, чтобы указать на класс, а затем запускать через CoCreateInstance) различные C ++ / VB6 ActiveX exe. (задания являются загрузчиками данных различных типов). Мне пришлось написать новый загрузчик, и поскольку ActiveX (чрезвычайно) устаревший, я написал его на VB.NET как библиотеку классов COM (поскольку VB6 также не очень хорошо обрабатывает HTTP на основе потоков, если вообще обрабатывает) с та же точка входа, что и у других загрузчиков.

Ну, первое, что я обнаружил, это то, что я, по-видимому, не могу вызвать библиотеку COM напрямую (когда средство запуска вызывает CoCreateInstance, оно запускает деструктор перед возобновлением со следующим оператором после вызова), поэтому мне пришлось написать VB6 ActiveX exe в качестве прокси, который создает экземпляр COM (Set oMyObject = CreateObject ("DownloaderLib.Loader")), а затем просто выполняет цикл DoEvents. Вызов that из обработчика заданий не вызывает проблем, и в моей среде разработки все работает вместе и прекрасно выполняется.

Однако, когда я перемещаю все части в свою среду тестирования системы, она выходит из строя. Приложение VB6 вызывает прокси, но прокси, похоже, не загружает (или, по крайней мере, не выполняет) COM. Я знаю, что запускаю прокси, потому что у меня есть код, который что-то «отображает» на сервере событий; Я знаю, что он не достигает COM, потому что у меня есть аналогичный код в COM, который должен отправлять сообщения в различные точки внутри него.

Я зарегистрировал прокси-сервер ActiveX exe и зарегистрировал (с «правильным» REGASM) библиотеку COM. Моя среда разработки - Win10, использующая VS2017 с .NET Framework v4.7.03190; COM построен как библиотека классов с таргетингом на .NET Framework 4.6.1. Моя системная тестовая среда - это Windows Server 16, а установленная .NET Framework - 4.7.2 (код выпуска 461814), а REGASM, который я использовал, находится в папке «C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \».

Что еще мне нужно сделать? Что я мог упустить?

Любая помощь будет принята с благодарностью.


person Bob.Seelbach    schedule 04.02.2020    source источник
comment
the REGASM I used is in the folder "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\" - регистрирует сборку как 64-разрядную сборку COM в реестре. Это не кажется правильным для 32-битного потребления VB6.   -  person TnTinMn    schedule 05.02.2020
comment
Поскольку ваши регистрации кажутся нормальными, я предполагаю, что может отсутствовать одна или несколько зависимостей. Возможно, вам нужно будет зарегистрировать или установить что-то еще. Монитор процессов - хороший (хотя и немного загадочный) инструмент для наблюдения за процессом во время его выполнения и определения того, что происходит не так.   -  person StayOnTarget    schedule 05.02.2020


Ответы (1)


@TnTinMn, вот в чем проблема. Я перерегистрировался в REGASM под "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \" (не Framework64), и теперь он работает!

Спасибо большое.

person Bob.Seelbach    schedule 05.02.2020