Выгрузить COM-элемент управления при работе в VB6 IDE

Part of my everyday work is maintaining and extending legacy VB6 applications. A common engine is written in C/C++ and VB6 uses these functions in order to improve performance.

When it comes to asynchronous programming, a C interface is not enough and we rely on COM controls to fire events to VB6.

My problem is that when I register the control in VB6, VB loads this control in memory and does not unload it until I quit the VB6 IDE. As the control is loaded the whole time, I am unable to recompile it in VC6, because the DLL file is locked.

A solution I found is not to enable the control in VB but use the CreateObject() with the full name of my control. The problem then is that I must declare my control as an Object because VB6 knows nothing of the interface I am using and I do not have access to IntelliSense, which is a pain.

Любая идея, как я могу сказать VB6 выгрузить элементы управления после выхода из приложения или непосредственно в среде IDE?

Ответов (1)

Решение

Я почти уверен, что нет хорошего способа заставить VB6 выгрузить управление.

Вот что я делаю ... вместо одновременного запуска Visual C и Visual Basic, запускайте VB6 под VC:

  1. Загрузите VC
  2. Откройте проект, содержащий ваши COM-объекты
  3. Редактировать, изменять и т. Д.
  4. В VC установите для выходного исполняемого файла VB6.EXE с соответствующими аргументами командной строки для загрузки рабочего пространства VB6.
  5. Теперь просто нажмите F5, чтобы запустить VB6 IDE и загрузить свой проект VB6.
  6. Если вы снова захотите изменить код COM, выйдите из VB6.EXE, внесите изменения и снова нажмите F5. Пока вы сохраняете свое рабочее пространство, VB6 будет помнить, какие окна вы открывали, и все настройки вашего проекта.

Преимущества этого метода:

  • Вы можете установить точки останова в COM-объекте и отладить его с помощью отладчика полного исходного кода.
  • Вы можете с удовольствием отлаживать одновременно на C и VB
  • Всякий раз, когда VB6 запущен, он всегда имеет последнюю версию COM DLL.