Comparando VB6 com VB.NET


Este artigo descreve algumas das muitas diferenças entre o VB6 e o VB.NET. Muita coisa feita em VB6 pode não rodar no VB.NET devido a alterações da sintaxe da linguagem.

O VB.NET inclui uma ferramenta para ajudar a migração de projetos do VB6 para o VB.NET que lista os problemas ocorridos durante a migração incluindo comentários no código migrado e itens TODO que indicam as mudanças que deverão ser feitas por você.

Apesar disto se você tiver uma melhor compreensão das principais mudanças ocorridas entre as versões a migração vai ficar menos traumática.

Além das alterações que irei mencionar neste artigo existem muitas diferenças fundamentais entre o VB6 e o VB.NET devido aos novos conceitos de programação incorporados na plataforma .NET.

Dentre posso mencionar : polimorfismo , herança , encapsulamento , sobrecarga , sobrescrita , construtores.

Então vamos ao que interessa...

Passagem de parâmetros

No VB6 , e versões anteriores , o padrão da passagem de parâmetros é feita por referência ou ByRef. quando o tipo de dados dos parâmetros é intrínseco a um Integer, Long, Boolean , String , etc.

No VB.NET todos os parâmetros são passado por valor ou ByVal.

O VB6 suporta também a passagem de parâmetros de forma opcional , onde você define parâmetros do tipo variant para uma rotina como sendo optional e não requerido. O código na rotina que verifica se o parâmetro contém um valor é feito pela palavra-chave IsMissing:

Function fDobro (Optional A)
  If IsMissing(A) Then
    fDobro = Nul
  Else
    fDobro = A * 2
End If

O VB.NET não suporta a palavra-chave IsMissing , desta forma você sempre terá que atribuir um valor padrão ao parâmetro opcional:

Function fDouble (Optiona A = 0)

Declaração de variáveis

O VB.NET não suporta o tipo de dados Variant.

Sempre declare variáveis em linhas separadas

Dim Var1 As Long
DIm Var2 As Long

No VB6 se você fizer a declaração acima em uma linha terá:

Dim Var1 , Var2 As Long

Isto declara a variável Var2 como Long e Var1 como Variant que não é suportada pelo VB.NET

Tipos de Dados

O VB.NET usa um runtime comum entre as linguagens do VS.NET , por isto os tipos de dados no VB6 sofreram alterações. Abaixo temos alguns tipos de dados comparados entre as duas linguagens:

VB6 VB.NET Comentário
Integer Short 16 bits
Long Integer 32 bits
N/A Long 64 bits
Variant N/A Usa o novo tipo de dados Object
Currency N/A Use Decimal em VB6 ou Decimal ou Long em VB.NET
N/A Decimal Disponível em VB6 ; nativo em VB.NET
String String VB.NET não suporta strings de comprimento fixo.

O VB.NET não suporta mais os tipos de dados Variant e Currency.

No VB.NET substitua Variant por Object e Currency por Long ou Decimal.

No VB6 você também pode usar o tipo de dados Decimal . Embora você não consiga declarar uma variável como decimal , você pode declará-la como Variant e então usar a função cDec para fazer a conversão.

Utilização de APIs

Muitas APIs que tomam argumentos numéricos esperam valores de 32-bits.

No VB6 isto representa o tipo de dados Long.

No VB.NET um long possui 64-bits e não irá funcionar com as chamadas de API 32-bit.

No VB.NET os parâmetros usados nas APIs terão que ser substituídos ou convertidos (Cast) para o tipo de dados Integer antes de chamar a API.

Além disto muitas APIs não funcionarão e outras terão que ser substituídas.

Comandos Não suportados

O VB.NET não suporta mais as funções : VarPtr, ObjTr e StrPtr que retornavam o endereço de memória de variáveis. (Você chegou a usar algumas delas?).

Não suporta também os comando Lset usados para converter um tipo definido pelo usuário em outro.

Algumas palavras chaves que não existem mais são :: GoSub, Let, Is Missing, DefBool, DefByte, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj , On x Goto e DefVar.

Abaixo os comandos que foram substituídos:

VB6 Namespace VB.NET Método / Propriedade
Circle System.Drawing.Graphics DrawEllipse
Line System.Drawing.Graphics DrawLine
Atn System.Math Atan
Sgn System.Math Sign
Sqr System.Math Sqrt
Lset System.String PadRight
Rset System.String PadLeft
Rnd Microsoft.VisualBasic.Compatibility.VB6 Rnd
Round Microsoft.VisualBasic.Compatibility.VB6 Round
DoEvents System.Winform.Application DoEvents
VarType System.Object GetType (retorna um objeto do tipo da classe o qual tem propriedades para obter informação.)

O comando Set não é mais suportado

Não é mais suportado no VB.NET                            Nova forma de utilização
Set objObjeto = objOutroObjeto              objObjeto = objOutroObjeto

O comando Debug foi alterado:

Forma usada no VB6                                             Nova forma de utilização
Debug.Print          Debug.Write
         Debug.WriteLine

Arrays

A declaração de vetores no VB6 era feita assim:

Dim Itens(5) As String

Isto fornece 6 elementos itens com índice de zero até cinco: Itens(0) , Itens(1) , Itens(2) , Itens(3), Itens(4) , Itens(5)

A mesma declaração no VB.NET irá lhe fornecer 5 elementos com índice de zero até 4 : Itens(0) , Itens(1) , Itens(2) , Itens(3), Itens(4).

Propriedades Default

No VB6 podíamos referenciar a propriedade padrão de um controle ou objeto sem especificar o nome da propriedade. Assim podemos fazer:

txtMeuTexto = "Ola Pessoal"
rst!("nome") = "Macoratti"
rst!nome = "Macoratti"

No VB.NET isto não é permitido , você tem que especificar o nome da propriedade:

txtMeuTexto.text = "Ola Pessoal"
rst!("nome").value = "Macoratti"
rst!nome.value = "Macoratti"

Propriedades Let e Get

A sintaxe para as propriedades Let e Get usadas em procedimentos definidos pelo usuário foi alterado. Veja como ficou:

VB6 VB.NET
Property Get MinhaPropriedade() As Integer
    MinhaPropriedade = m_MinhaPropriedade
End Property

Property Let MinhaPropriedade(NewValue As Integer)
    m_MinhaPropriedade = NewValue
End Property

Property MinhaPropriedade() As Short
  Get
      MinhaPropriedade = m_MinhaPropriedade
  End Get
  Set
      m_MinhaPropriedade = Valor
  End Set
End Property

ligação Tardia (Late Binding)

Ao atualizar um projeto VB6 para VB.NET a ferramenta de atualização tenta converter referências feitas de propriedades e métodos obsoletas de objetos para as novas usadas no VB.NET:

Dim o As Object

Set o = Me.Label1
o.Label1 = "Nome:"
o.Label1.Caption = "Nome:"

Em ambas declarações estou definindo a propriedades caption do controle Label1 para "Nome.".

No VB.NET não existe mais a propriedade caption ela é agora a propriedade Text.

Como o objeto foi declarado usando a ligação tardia (late Binding) o assistente de migração não sabe que tipo de objeto 'o' se refere e não pode atualizar o código.

Para que a atualização seja possível você deve usar a ligação precoce (Early Binding) :

Dim o As Label

Set o = Me.Label1
o.Label1.Caption = "Nome:"

Operações Lógicas

Os operadores Not , And e Or funcionam de forma diferente no VB.NET.

No VB6 e versões anteriores estas funções realizavam operações lógicas e operações de BitWise dependendo do contexto de utilização. Se todos os operandos fossem to tipo Boolean eles realizavam operações lógicas caso contrário realizavam operações de BitWise.

No VB.NET estes operadores irão realizar somente operações lógicas. O VB.NET introduziu as palavras-chave : BitAnd , BitOr, BitNot e BitXor para realizar operações de bitwise.

Se o seu código VB6 utiliza operadores com valores não booleanos a conversão poderá gerar resultados incorretos.

Ponto final. Aguarde mais artigos sobre VB.NET ...

Veja os Destaques e novidades do SUPER DVD Visual Basic  (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C#  com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Veja também os Cursos com vídeo aulas e projetos exemplos:

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti