Часть моей повседневной работы - поддержка и расширение устаревших приложений VB6. Общий движок написан на C / C ++, и VB6 использует эти функции для повышения производительности.
Когда дело доходит до асинхронного программирования, интерфейса C недостаточно, и мы полагаемся на элементы управления COM для передачи событий в VB6.
Моя проблема в том, что когда я регистрирую элемент управления в VB6, VB загружает этот элемент управления в память и не выгружает его, пока я не выйду из среды VB6. Поскольку элемент управления загружен все время, я не могу перекомпилировать его в VC6, потому что файл DLL заблокирован.
Решение, которое я нашел, состоит не в том, чтобы включить элемент управления в VB, а в использовании CreateObject()
полного имени моего элемента управления. Проблема в том, что я должен объявить свой элемент управления как объект, потому что VB6 ничего не знает об используемом мной интерфейсе, и у меня нет доступа к IntelliSense, что является проблемой.
Любая идея, как я могу сказать VB6, чтобы выгрузить элементы управления после выхода из приложения или непосредственно в IDE?
Я почти уверен, что нет хорошего способа заставить VB6 разгрузить управление.
Вот что я делаю ... вместо одновременного запуска Visual C и Visual Basic, запустите VB6 под VC:
- Загрузи ВК
- Откройте проект, содержащий ваши COM-объекты
- Редактировать, изменять и т. Д.
- В VC установите для параметра Output Executable значение VB6.EXE с соответствующими аргументами командной строки для загрузки рабочего пространства VB6.
- Теперь просто нажмите F5, чтобы запустить VB6 IDE и загрузить свой проект VB6.
- Когда вы захотите снова изменить код COM, выйдите из VB6.EXE, внесите изменения и снова нажмите F5. Пока вы сохраняете свое рабочее пространство, VB6 будет помнить, какие окна у вас открыты, и все настройки вашего проекта.
Преимущества этого метода:
- Вы можете установить точки останова в COM-объекте и отладить его, используя отладчик с полным исходным кодом.
- Вы можете счастливо отлаживать в C и VB одновременно
- Всякий раз, когда VB6 работает, он всегда имеет последнюю версию COM DLL