Вызов VB. NET COM Class Library из VB6 ActiveX не работает - PullRequest
2 голосов
/ 05 февраля 2020

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

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

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

I зарегистрировал прокси ActiveX exe и I зарегистрировал (с «правильным» 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 \ ".

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

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

1 Ответ

0 голосов
/ 05 февраля 2020

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

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

...