Visual Basic 5 x Visual Basic 6


Antes de começar uma perguntinha: Quais as duas últimas versões do Visual Basic ?

Resposta : Visual Basic 5 - service pack 3 e Visual Basic 6 - service pack 5

Obs: Espera-se que você esteja rodando as versões com os respectivos service packs.

Não estou considerando o VB.NET por que as mudanças foram tantas que nem podemos compará-lo com as versões anteriores do VB.

Então podemos concluir que tem muita gente usando o VB 5 e o VB 6 , não sei estimar a proporção, mas creio que uma grande parte ainda usa o VB 5. Vamos considerar então duas situações :

Situação 1 - Você usa o VB5 e quer rodar uma aplicação feita no VB6 . Será que você consegue ???

Depende !!!

Agora podemos ter o seguinte problema: Você pode criar uma aplicação no VB6 que faça referência a Windows Common Controls , se a referência for para a versão do VB5 ( sim , você pode referênciar a versão do windows common controls para o vb5 no vb6 , dê uma olhada na figura abaixo.)

- O componente Microsoft Windows Common Controls possui versões para VB5 e VB6 quando você instala a versão do VB6

Situação 2 - Você usa o VB6 e que rodar aquelas aplicações feitas no VB5 ? Vai rodar sem problemas ?

Quer saber a verdade ??? Quase todos os controles usados no VB5 serão automaticamente atualizados para a versão do VB6. Eu disse QUASE TODOS. Os controles do VB5 abaixo relacionados NÃO serão atualizados:

Controle VB5 NÃO atualizado Controle VB6 correspondente
Comctl32.ocx Mscomctl.ocx
Comct232.ocx Mscomct2.ocx
Mschart.ocx Mschrt20.ocx

Embora a documentação da Microsoft diga que a atualização deverá ocorrer , ela não ocorre ; Os novos (VB6) controles não são compatíveis com os antigos (VB5) , pois de acordo com as regras da COM ( Component Object Model ) eles terão novos nomes e novos GUIDs e por consequência terão novas Typelibs , e , quando o VB carrega um projeto ele checa a versão da TypeLib , dai ele não vai saber se os controles foram atualizados pois as TypeLibs para os novos controles tem um GUID diferente dos controles antigos.

O que fazer então ???

- Arregaçe as mangas :

  1. Abre o projeto .VBP da versão do VB5 no bloco de notas e altere as seguintes linhas que fazem a referência aos arquivos OCX para :
Object = {831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Object = {86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCT2.OCX
Object = {65E121D4-0C60-11D2-A9FC-0000F8754DA1}#2.0#0; MSCHRT20.OCX
  1. Salve o arquivo .VBP
  2. Agora abra o arquivo com extensão .FRM ou .CTL que utilize algum dos controles acima e altere as linhas com referência ao arquivo OCX para:
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Object = "{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCT2.OCX"
Object = "{65E121D4-0C60-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCHRT20.OCX"

Cuidado : A atualização acima NÃO é igual a do item 1.(note as aspas)

  1. Altere todo texto que faça referencia as livrarias antigas para o nome das livrarias novas. Exemplo:
    Altere ComctlLib.ImageList para MSComctlLib.ImageList
  2. Repita a operação para cada arquivo .FRM ou CTL que use um dos controles antigos e salve o arquivo.

Tá com preguiça te fazer todo este serviço ???

Então baixe uma ferramenta que faz o serviço para você : ActiveX Control Update Utility

Falei e disse !!! Até maix ... (também de uma olhada nos artigos : Q190952 and Q194412 da KB)


José Carlos Macoratti