Pergunta

Parte do meu trabalho diário é manter e ampliar aplicativos VB6 legados.Um mecanismo comum é escrito em C/C++ e o VB6 usa essas funções para melhorar o desempenho.

Quando se trata de programação assíncrona, uma interface C não é suficiente e contamos com controles COM para disparar eventos para VB6.

Meu problema é que quando registro o controle no VB6, o VB carrega esse controle na memória e não o descarrega até que eu saia do IDE do VB6.Como o controle fica carregado o tempo todo, não consigo recompilá-lo no VC6, pois o arquivo DLL está bloqueado.

Uma solução que encontrei não é habilitar o controle em VB mas sim usar o CreateObject() com o nome completo do meu controle.O problema então é que devo declarar meu controle como um Objeto porque o VB6 não sabe nada sobre a interface que estou usando e não tenho acesso ao IntelliSense, o que é um problema.

Alguma idéia de como posso dizer ao VB6 para descarregar os controles após sair do aplicativo ou diretamente no IDE?

Foi útil?

Solução

Tenho certeza de que não há uma boa maneira de forçar o VB6 a descarregar o controle.

Aqui está o que eu faço...em vez de executar Visual C e Visual Basic lado a lado, execute VB6 sob VC:

  1. Carregue VC
  2. Abra o projeto que contém seus objetos COM
  3. Editar, alterar, etc.
  4. No VC, defina o executável de saída como VB6.EXE com argumentos de linha de comando apropriados para carregar o espaço de trabalho VB6
  5. Agora basta pressionar F5 para iniciar o IDE VB6 e carregar seu projeto VB6
  6. Quando quiser alterar o código COM novamente, saia do VB6.EXE, faça as alterações e pressione F5 novamente.Contanto que você salve seu espaço de trabalho, o VB6 lembrará quais janelas você abriu e todas as configurações do seu projeto.

Vantagens deste método:

  • Você pode definir pontos de interrupção no objeto COM e depurá-lo usando um depurador de código-fonte completo
  • Felizmente, você pode depurar em C e VB ao mesmo tempo
  • Sempre que o VB6 está em execução, ele sempre tem a versão mais recente das DLLs COM
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top