Escolar Documentos
Profissional Documentos
Cultura Documentos
NET
Microsoft Corporation Outubro de 2000 Resumo: Este documento proporciona recomendaes para desenvolvedores Microsoft Visual Basic que pretendem atualizar suas aplicaes para o Visual Basic.NET. Ele contm informao sobre a Ferramenta de Atualizao do Visual Basic.NET e discute orientaes arquiteturais que possibilitam uma atualizao suave do Visual Basic 6 para o Visual Basic.NET. (26 pginas impressas)
Contedo
Viso Geral O Que Visual Basic.NET? Porque o Visual Basic.NET No 100% Compatvel? Atualizando para o Visual Basic.NET Trabalhando com o Visual Basic 6.0 e com o Visual Basic.NET Recomendaes Arquiteturais Aplicaes baseadas em Browser Projetos Cliente/Servidor Aplicaes de Uma nica Camada Dados Atualizao Variant para Object Integer para Short Sintaxe de Propriedade Formulrios Visual Basic para Windows Forms Interfaces Relatrio de Atualizao e Comentrios Recomendaes de Programao Use Early-Binding Use Date para Armazenar Datas Resolva Propriedades Padro sem Parmetro Use Comparaes Booleanas com AND/OR/NOT Evite Propagao de Null Use Arrays Delimitados por Zero Use Constantes Ao Invs de Valores Bsicos Arrays e Strings de Tamanho Fixo em Tipos Definidos pelo Usurio Evite Recursos Legados Windows APIs Consideraes para Formulrios e Controles
Viso Geral
Este documento proporciona recomendaes para desenvolvedores Microsoft Visual Basic que pretendem atualizar suas aplicaes para o Microsoft Visual Basic.NET. O Visual Basic.NET vai abrir e atualizar projetos Visual Basic 6.0 para tecnologias Visual Basic.NET, mas na maioria dos casos voc ter que fazer algumas modificaes nos seus projetos aps traz-los para o Visual Basic.NET. O propsito deste documento recomendar como projetar e implementar seus projetos Visual Basic atuais para minimizar o nmero de alteraes que voc ter que fazer quando eles forem atualizados para o Visual Basic.NET. Quando apropriado, ns usamos novas construes de linguagem; entretanto, este documento no pretende ser uma referncia da linguagem Visual Basic.NET.
Nota O Visual Basic.NET ainda est em desenvolvimento; alguns detalhes de compatibilidade podem mudar antes do lanamento do produto. Seguir as orientaes presentes neste documento no garante que seu cdigo no vai precisar ser alterado; as orientaes pretendem somente reduzir a quantidade de trabalho necessria para a converso.
Figura 1. Suporte VB.NET para control anchoring Para ajud-lo a fazer as alteraes, aps a atualizao do seu projeto, o Visual Basic.NET inclui um relatrio de atualizao ao seu projeto detalhando quaisquer problemas, e insere comentrios no seu cdigo atualizado alertando para comandos que tero que ser alterados. Como estes comentrios so apresentados como tarefas TO DO na nova janela Task List, voc pode ver facilmente quais alteraes so necessrias e navegar para o comando do cdigo simplesmente efetuando o duplo clique na tarefa. Cada tarefa e item no relatrio de atualizao associado a um tpico online do Help oferecendo orientao posterior sobre porque o cdigo precisa ser alterado e sobre o que voc precisa fazer. Ao seguir as recomendaes neste documento, voc pode minimizar e, em alguns casos, eliminar as alteraes necessrias aps a atualizao do seu projeto para o Visual Basic.NET. Na maioria dos
casos, as recomendaes simplesmente representam boas prticas de programao; entretanto, ns tambm identificamos os objetos e mtodos que no possuem equivalentes e que deveriam ser usados com parcimnia se voc pretende atualizar seu projeto para o Visual Basic.NET.
Recomendaes Arquiteturais
A plataforma .NET apresenta melhorias sobre as arquiteturas anteriores e inclui maior suporte para escalabilidade e aplicaes distribudas apesar do acesso a dados desconectado, transporte de mensagem baseado em HTTP e implantao baseada em cpia de arquivo (no mais registro de componentes). Para aproveitar melhor estes recursos, voc deve projetar suas aplicaes com uma arquitetura similar que voc usaria no Visual Basic.NET.
O Visual Basic.NET introduz o ASP.NET, uma verso aprimorada do ASP, e melhora a arquitetura com Web Forms, que so pginas HTML com eventos Visual Basic. A arquitetura baseada em servidor. Segue abaixo uma lista de recomendaes e sugestes arquiteturais para o desenvolvimento de aplicaes Visual Basic 6.0 baseadas em browser que sero na sua maioria migradas para projetos Visual Basic.NET: Ns recomendamos o uso das orientaes arquiteturais multi-camada da Microsoft para criar suas aplicaes, criar a interface com ASP e usar objetos COM Visual Basic 6.0 ou Visual C+ + 6.0 na sua lgica de negcio. ASP totalmente suportado no Visual Basic.NET e voc pode continuar a estender suas aplicaes usando ASP, ASP.NET e Web Forms. Objetos de negcio Visual Basic 6.0 e Visual C++ 6.0 podem ser usados sem modificao ou atualizados para o Visual Studio.NET. Aplicaes DHTML contm pginas DHTML e DLLs do lado cliente. Estas aplicaes no podem ser atualizadas automaticamente para o Visual Basic.NET. Ns recomendamos a voc manter estas aplicaes no Visual Basic 6.0. Documentos ActiveX no so suportados no Visual Basic.NET, e como projetos DHTML, no podem ser atualizados automaticamente. Ns recomendamos a voc manter suas aplicaes de documento ActiveX em Visual Basic 6.0 ou, quando possvel, substituir documentos ActiveX por controles do usurio. Documentos ActiveX e aplicaes DHTML do Visual Basic 6.0 podem interoperar com tecnologias Visual Basic.NET. Por exemplo, voc pode navegar de um Visual Basic.NET Web Form para uma pgina DHTML do Visual Basic 6.0, e viceversa. Webclasses no existem mais no Visual Basic.NET. Aplicaes Webclass sero atualizadas para o ASP.NET; entretanto, voc ter que fazer algumas modificaes aps a atualizao. Aplicaes Webclass existentes podem interoperar com Web Forms e aplicaes ASP do Visual Basic.NET, mas para novos projetos ns recomendamos o uso da plataforma Windows DNA do ASP com objetos de negcio do Visual Basic 6.0.
Para maiores informaes sobre a construo de aplicaes com a arquitetura multi-camada da Microsoft, veja o Web site Microsoft Windows DNA.
Projetos Cliente/Servidor
O Visual Basic 6.0 ofereceu vrias tecnologias para a criao de aplicaes cliente/servidor: Formulrios Visual Basic Objetos Microsoft Transaction Server (MTS)/COM+ da camada do meio Controles de usurio
No Visual Basic.NET, h um novo pacote de formulrio: Windows Forms. Windows Forms possui um modelo de objeto diferente dos Formulrios Visual Basic 6.0, mas amplamente compatvel. Quando seu projeto atualizado, Formulrios Visual Basic so convertidos para Windows Forms. O Visual Basic.NET melhora o suporte ao desenvolvimento de servios MTS da camada do meio e componentes COM+. Usando o debugger unificado, voc pode passar de uma aplicao cliente para um componente MTS/COM+ e voltar para o cliente. Voc tambm pode usar o debugger unificado para caminhar por componentes MTS/COM+ do Visual Basic 6.0 (desde que eles estejam compilados no cdigo nativo, com informao de debug simblica e sem otimizaes). O Visual Basic.NET tambm introduz um novo componente da camada do meio, o Web Services. Web Services so hospedados pelo ASP.NET e usam o transporte HTTP permitindo que requisies de
mtodo passem por firewalls. Eles passam e retornam dados usando XML padro da indstria, permitindo que outras linguagens e outras plataformas acessem sua funcionalidade. Embora eles no suportem transaes MTS, voc pode querer alterar seus componentes MTS/COM+ para Web Services em situaes onde voc no precisa de transaes distribudas mas quer interoperar com outras plataformas. Embora no haja nenhum mtodo automtico para isto, a tarefa trivial e pode ser completada em alguns minutos usando uma operao drag-and-drop aps a atualizao do seu projeto para o Visual Basic.NET. Quando seu projeto atualizado, controles de usurio so atualizados para controles Windows; entretanto, configuraes de tag de propriedade customizadas e atribuies de chaves aceleradoras no sero atualizadas.
Aplicaes de banco de dados de uma camada so caracterizadas por uma aplicao Visual Basic armazenando dados em um banco de dados Microsoft Access. Estas aplicaes sero atualizadas para o Visual Basic.NET com algumas limitaes (veja a seo Dados mais a frente neste documento). Agora que o Visual Basic.NET IDE uma parte totalmente integrada do Visual Studio.NET IDE, o Visual Basic.NET possui um novo modelo de extensibilidade independente de linguagem. Visual Basic.NET add-ins agora so Visual Studio.NET add-ins, e voc pode automatizar e incluir recursos a qualquer linguagem no Visual Studio.NET. Por exemplo, voc pode escrever um Visual Basic.NET add-in que colore novamente um Visual C# Windows Form ou inclui comentrios em uma classe Visual Basic. Para proporcionar esta funcionalidade, o Visual Basic.NET mudou do antigo modelo de extensibilidade, e voc ter que alterar os objetos de extensibilidade na sua aplicao para aproveitar os novos recursos. Muitas aplicaes caem na categoria de programas Utilitrios. Aplicaes utilitrias que manipulam arquivos, parmetros do registry e semelhantes sero freqentemente atualizadas sem a necessidade de quaisquer alteraes adicionais. Aps a atualizao, voc pode aproveitar muitos recursos novos, como o tratamento de exceo na linguagem para capturar erros do file system, e usar classes do registry do .NET Framework para manipular o registry. bom estar ciente que aplicaes que se apoiam em caractersticas de performance especficas do Visual Basic 6.0, como os jogos arcade, provavelmente exigiro algumas modificaes pois o Visual Basic.NET possui caractersticas de performance diferentes. Para o suporte a jogos no Visual Basic.NET, voc pode usar o Microsoft DirectX 7, ou a nova verso do GDI. O GDI+ introduz muitos novos recursos, incluindo o suporte Alpha blending para todas as primitivas de grficos 2-D, anti-aliasing e suporte expandido para formatos de arquivo de imagem.
Dados
O Visual Basic 6.0 props vrios tipos de acesso a dados: ActiveX Data Objects (ADO) Remote Data Objects (RDO) Data Access Objects (DAO)
O Visual Basic.NET introduz uma verso aprimorada do ADO chamada ADO.NET. ADO.NET tem como alvo dados desconectados e proporciona melhorias de performance com relao ao ADO quando
usado em aplicaes distribudas. ADO.NET oferece data binding de leitura/gravao de controles para Windows Forms e data binding somente de leitura para Web Forms. DAO, RDO e ADO ainda podem ser usados no cdigo do Visual Basic.NET, com algumas modificaes triviais (cobertas na seo linguagem deste documento). Entretanto, o Visual Basic.NET no suporta data binding DAO e RDO de controles, controles de dados ou conexo de Usurio RDO. Ns recomendamos que se suas aplicaes contm data binding DAO ou RDO voc as mantenha no Visual Basic 6.0 ou atualize o data binding DAO ou RDO para ADO antes de atualizar seu projeto para o Visual Basic.NET, pois data binding ADO suportado no Windows Forms. Informao sobre como fazer isso est disponvel na Ajuda do Visual Basic 6.0. Em resumo, ns recomendamos o uso de ADO nos seus projetos Visual Basic 6.0.
Atualizao
Quando seu cdigo atualizado, o Visual Basic.NET cria um novo projeto atualizado aproveitando ao mximo as alteraes necessrias de linguagem e objeto para voc. As sees seguintes proporcionam alguns exemplos de como seu cdigo atualizado.
Sintaxe de Propriedade
O Visual Basic.NET introduz uma sintaxe mais intuitiva para propriedades, que agrupa Get e Set. Seus comandos de propriedade so atualizados conforme o seguinte exemplo: Property Get MyProperty() As Integer m_MyProperty = MyProperty End Property Property Let MyProperty(NewValue As Integer) m_MyProperty = NewValue End Property atualizado para:
Property MyProperty() As Short Get m_MyProperty = MyProperty End Get Set m_MyProperty = Value End Set End Property
Figura 2. Editor de menu in-place do Windows Forms. (Clique na figura para ampli-la).
Interfaces
Nas verses anteriores do Visual Basic, interfaces para classes pblicas eram sempre escondidas do usurio. No Visual Basic.NET, elas podem ser vistas e editadas no Editor de Cdigo. Quando seu projeto atualizado, voc escolhe ter ou no declaraes de interface criadas automaticamente para suas classes pblicas.
Figura 3. So includos comentrios de atualizao no cdigo Visual Basic e na Lista de Tarefas. (Clique na figura para ver a imagem ampliada).
Recomendaes de Programao
Esta seo proporciona recomendaes sobre como voc deveria escrever cdigo para minimizar as alteraes que voc ter que fazer aps a atualizao do seu projeto para o Visual Basic.NET.
Use Early-Binding
O Visual Basic 6.0 e o Visual Basic.NET suportam objetos late-bound, que a prtica de declarar uma varivel como o tipo de dados Object e atribu-la a uma instncia de uma classe em tempo de execuo. Entretanto, durante o processo de atualizao, objetos late-bound podem introduzir problemas na resoluo de propriedades padro, ou quando o modelo bsico de objeto foi alterado e propriedades, mtodos e eventos tm que ser convertidos. Por exemplo, suponha que voc possui um Formulrio chamado Form1 com um label nomeado Label1; o seguinte cdigo Visual Basic 6.0 poderia definir o ttulo label como SomeText: Dim o As Object Set o = Me.Label1 o.Caption = "SomeText" No Visual Basic.NET Windows Forms, a propriedade Caption de um controle de label agora chamada de Text. Quando seu cdigo atualizado, todas as instncias da propriedade Caption so alteradas para Text, mas como um objeto late-bound no possui tipo, o Visual Basic no pode detectar qual o tipo de objeto, ou se quaisquer propriedades deveriam ser traduzidas. Nestes casos, voc mesmo ter que alterar o cdigo aps a atualizao. Se voc reescrever o cdigo usando objetos early-bound, ele ser atualizado automaticamente: Dim o As Label Set o = Me.Label1 o.Caption = "SomeText"
Sempre que possvel, voc deve declarar variveis com o tipo de objeto apropriado ao invs de simplesmente declar-las como o tipo de dados Object. Nos casos onde voc usa variveis Object e Variant no seu cdigo Visual Basic 6.0, ns recomendamos a voc usar converses explcitas ao assinalar variveis, efetuar operaes nas variveis, ou passar as variveis para uma funo. Por exemplo, a inteno da operao + no cdigo seguinte no est clara: Dim Var1 As Dim Var2 As Dim Var3 As Var1 = "3" Var2 = 4 Var3 = Var1 Variant Variant Variant + Var2 'RUIM: Qual a inteno?
Var1 e Var2 devem ser includas como strings ou integers? O exemplo acima pode resultar em um erro de run-time no Visual Basic.NET. A rescrita da linha final para usar converses explcitas garante que o cdigo ir funcionar: Var3 = CInt(Var1) + CInt(Var2) 'BOM: converso explcita
O Visual Basic.NET suporta funes de overloading com base no tipo do parmetro. Por exemplo, a funo Environ possui agora duas formas: Environ( Expression As Integer) As String Environ( Expression As String ) As String O Visual Basic.NET determina qual funo chamar com base no tipo do parmetro. Se voc passar um inteiro para Environ(), a verso integer ser chamada; se voc passar um string, ento a verso string ser chamada. Cdigo que passa um tipo de dados Variant ou Object para uma funo overloaded pode causar um erro de compilao ou runtime. O uso de uma converso explcita, como no exemplo seguinte, significa que o seu cdigo ir funcionar como desejado aps sua atualizao para o Visual Basic.NET: Dim Dim v = a = a As String v As Variant "Path" Environ(CStr(v))
O uso de converses explcitas de objetos late bound uma boa prtica de codificao. Ela facilita a determinao da inteno do cdigo e torna mais fcil para voc mover seu projeto para o Visual Basic.NET.
O .NET framework proporciona as funes ToOADate e FromOADate para a converso entre doubles e datas. Entretanto, quando seu projeto atualizado para o Visual Basic.NET, difcil determinar a inteno do cdigo que usa doubles para armazenar datas. Para evitar modificaes desnecessrias no seu cdigo em Visual Basic.NET, use sempre o tipo de dados Date para armazenar datas.
'BOM: Propriedade padro est resolvida 'BOM: Propriedade padro est resolvida
Embora propriedades padro sem parmetro no sejam suportadas no Visual Basic.NET, propriedades padro com parmetro so suportadas. Para entender a diferena entre os dois tipos, considere que propriedades padro com parmetro sempre possuem um ndice. Um exemplo a propriedade padro do ADO recordset: a coleo Fields. O cdigo: Dim rs As ADODB.Recordset rs("CompanyName") = "SomeCompany" rs!CompanyName = "SomeCompany"
na verdade um atalho para: Dim rs As ADODB.Recordset rs.Fields("CompanyName").Value = "SomeCompany" rs.Fields!CompanyName.Value = "SomeCompany" Neste caso, a propriedade Fields possui parmetro, e portanto seu uso vlido no Visual Basic.NET; entretanto, a propriedade padro da propriedade Fields, Value, no possui parmetro, ento o uso correto no Visual Basic.NET : Dim rs As ADODB.Recordset rs("CompanyName").Value = "SomeCompany" rs!CompanyName.Value = "SomeCompany" Este exemplo e a maior parte das outras propriedades padro so resolvidos para voc quando o projeto atualizado, portanto resolv-los no Visual Basic 6.0 simplesmente uma boa prtica de programao. Entretanto, voc deve evitar usar propriedades padro com os tipos de dados Object e Variant, pois eles no podem ser resolvidos e voc mesmo ter que corrigir o cdigo no projeto atualizado.
Dim a As Integer Dim b As Integer Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("A resposta " & c) ento aps a atualizao do projeto, o cdigo resultante ser mais familiar: Dim a As Short Dim b As Short Dim c As Boolean a = 1 b = 2 c = a <> 0 And b <> 0 MsgBox ("A resposta " & c) A diferena que cada operador sendo comparado uma expresso Booleana, e portanto usa o AND lgico no Visual Basic 6.0. O AND lgico produz o mesmo resultado tanto no Visual Basic 6.0 quanto no Visual Basic.NET e portanto o cdigo no alterado. Isto significa que voc pode cortar e colar cdigo entre o Visual Basic.NET e o Visual Basic 6.0, e seu cdigo ser executado mais rapidamente no Visual Basic.NET pois ele est usando o operador AND nativo ao invs de uma funo de compatibilidade. O Visual Basic.NET trata funes em operaes AND/OR/NOT de forma diferente que o Visual Basic 6.0. Considere o seguinte exemplo: Dim b As Boolean b = Function1() And Function2() No Visual Basic 6.0, Function1 e Function2 so avaliados. No Visual Basic.NET, Function2 s avaliada se Function1 retorna True. Isto conhecido como curto-circuito dos operadores lgicos. Na maioria dos casos a nica diferena em tempo de execuo que a verso curto-circuitada executa mais rapidamente; entretanto, se Function2 possui efeitos colaterais, como a manipulao de um banco de dados ou uma varivel global, ento o comando ter um comportamento em tempo de execuo diferente do que no Visual Basic 6.0. Para evitar este problema, se seus comandos AND/OR/NOT contm funes, mtodos ou propriedades ento o comando atualizado para uma verso de compatibilidade que avalia as funes. O exemplo acima seria atualizado para o seguinte: Dim b As Boolean b = VB6.AND(Function1(), Function2()) Para evitar que seu cdigo seja atualizado para a verso de compatibilidade, faa as seguintes modificaes: Dim Dim Dim c = d = b = b As Boolean c As Boolean d As Boolean Function1() Function2() c And d
Tambm importante notar que no Visual Basic.NET, o valor base de True foi alterado de 1 para 1. Esta alterao foi feita para ajudar aplicaes Visual Basic a interoperar com outras linguagens .NET, e resolve finalmente uma diferena importante com o Visual C++. Devido a esta alterao, nas suas aplicaes Visual Basic 6.0, voc sempre deve usar a constante True ao invs de -1, e tipos Boolean ao invs de integers para tipos Boolean. Para ilustrar a importncia disto, considere o exemplo abaixo, que produz o resultado True no Visual Basic 6.0, e False no Visual Basic.NET:
Dim i As Integer i = True If i = -1 Then MsgBox ("True") Else MsgBox ("False") End If Entretanto, alterar este cdigo para usar Booleanos gera o resultado True tanto no Visual Basic 6.0 quanto no Visual Basic.NET, e tambm gera um cdigo mais legvel: Dim i As Boolean i = True If i = True Then MsgBox ("True") Else MsgBox ("False") End If As coisas mais importantes para lembrar e implementar provenientes deste exemplo so: Sempre use os nomes constantes True e False ao invs de seus valores base 0 e 1. Use o tipo de dados Boolean para armazenar valores Boolean.
Se voc no fizer estas duas coisas, talvez voc tenha que fazer alteraes no seu projeto aps ele ter sido atualizado para o Visual Basic.NET.
Propagao de Null no suportada no Visual Basic.NET. O comando 1+Null ir gerar uma m combinao de tipos no Visual Basic.NET. Alm disso, onde o Visual Basic 6.0 tinha duas verses da funo LeftLeft$ retornando um string, Left retornando uma variant que poderia ser Nullo Visual Basic.NET possui somente uma verso, Left, que sempre retorna um string. Para estar compatvel com o Visual Basic 6.0 e com o Visual Basic.NET voc deve sempre escrever cdigo que testa o Null ao invs de apoiar-se na propagao de Null. Alm disso, no Visual Basic.NET, as seguintes funes no mais retornaro Null: Chr Command CurDir Date Environ Error Hex Lcase Ltrim Mid Oct Right RTrim Space Str Time Trim UCase
Propagao de Null normalmente usada em aplicaes de banco de dados, onde voc precisa verificar se um campo de banco de dados contm Null. Nestes casos voc deve verificar resultados usando a funo IsNull() e efetuar a ao apropriada.
Alm disso, no Visual Basic 6.0, Dim (0 to 10) As Integer criava um array de 11 inteiros, indexado de 0 to 10. O mesmo comando no Visual Basic.NET cria um array de 10 inteiros, de 0 a 9. Um efeito colateral que Option Base 0|1 foi removido da linguagem. Quando seu projeto atualizado para o Visual Basic.NET, quaisquer comandos baseados em opo so removidos do seu cdigo. Se o array limitado por zero, ele no alterado. Entretanto, se um array no limitado por zero, ento ele atualizado para uma classe wrapper array, como no exemplo seguinte: Dim a(1 To 10) As Integer alterado para: Dim a As Object = New VB6.Array(GetType(Short), 1,10) A classe wrapper array bem mais lenta que o array nativo, e h limitaes ao uso de dois tipos de array na mesma aplicao. Por exemplo, voc no pode passar um wrapper array para algumas funes com parmetros do tipo Array, e talvez voc no consiga passar um wrapper array para uma classe Visual C# ou Visual C++. Por esta razo, voc deve usar arrays delimitados por zero no seu cdigo Visual Basic 6.0, evitar usar ReDim como uma declarao de array e evitar usar Option Base 1.
Da mesma forma, use True e False ao invs de -1 e 0. No Visual Basic.NET, os valores e em alguns casos os nomes de algumas propriedades e constantes foram alterados; por exemplo, o valor de True muda de -1 para 1. Quando seu projeto atualizado para
o Visual Basic.NET, a maior parte das constantes so alteradas automaticamente para voc; entretanto, se voc est usando valores ou variveis bsicas ao invs dos nomes das constantes, muitos casos no podem ser atualizados automaticamente. O uso de nomes de constante minimiza o nmero de modificaes que voc tem que fazer.
Def<type>
Nas verses anteriores do Visual Basic, DefBool, DefByte, DefInt, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj e DefVar eram usadas na seo de declaraes de um mdulo para definir um faixa de variveis como de um certo tipo. Por exemplo: DefInt A-C definia todas as variveis comeando com as letras A, B, ou C como um inteiro. Ao invs de usar comandos Def<type>, voc deve declarar variveis explicitamente.
Computed GoTo/GoSub
Comandos Computed GoTo/GoSub tm esta forma: On x GoTo 100, 200, 300 Eles no so suportados no Visual Basic.NET. No lugar deles, voc deve usar comandos If, e construes Select Case.
GoSub/Return
Comandos GoSub e Return no so suportados no Visual Basic.NET. Na maioria dos casos voc pode substitu-los por estas funes e procedimentos.
LSet
No Visual Basic 6.0, o comando LSet podia ser usado para atribuir uma varivel de um tipo definido pelo usurio para outra varivel de um tipo diferente definido pelo usurio. Esta funcionalidade no suportada no Visual Basic.NET.
Windows APIs
Muitas APIs podem ser usadas exatamente como no Visual Basic 6.0, lembrando que voc tem que ajustar seus tipos de dados de acordo. O tipo de dados Long do Visual Basic 6.0 agora o tipo de dados Integer do Visual Basic.NET, e o tipo de dados Integer do Visual Basic 6.0 agora o tipo de
dados Short no Visual Basic.NET. Durante a atualizao, estas alteraes so feitas para voc, e APIs simples funcionam exatamente como no Visual Basic 6.0. Por exemplo: Private Declare Function GetVersion Lib "kernel32" () As Long Function GetVer() Dim Ver As Long Ver = GetVersion() MsgBox ("System Version is " & Ver) End Function alterado para: Private Declare Function GetVersion Lib "kernel32" () As Integer Function GetVer() Dim Ver As Integer Ver = GetVersion() MsgBox("System Version is " & Ver) End Function Alm das atualizaes dos tipos de dados numricos, o Visual Basic 6.0 tinha um tipo de dados de string de tamanho fixo que no suportado no Visual Basic.NET, e que atualizado para uma classe wrapper string de tamanho fixo. Em muitos casos no Visual Basic 6.0 voc pode efetuar a mesma ao usando um string normal. Por exemplo: Private Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long Function GetUser() Dim Ret As Long Dim UserName As String Dim Buffer As String * 25 Ret = GetUserName(Buffer, 25) UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1) MsgBox (UserName) End Function pode ser melhor escrito usando-se um string normal definido explicitamente para o tamanho 25 ao invs de um string de tamanho fixo: Dim Buffer As String Buffer = String$(25, " ") Este cdigo atualizado para o Visual Basic.NET da seguinte forma: Declare Function GetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Function GetUser() Dim Ret As Integer Dim UserName As String Dim Buffer As String Buffer = New String(CChar(" "), 25) Ret = GetUserName(Buffer, 25) UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1) MsgBox(UserName) End Function Em alguns casos, o Visual Basic.NET trata melhor a passagem de strings para APIs, pois voc pode declarar opcionalmente como voc quer que os strings sejam passados usando as palavras chave ANSI e UNICODE.
H trs casos onde voc precisa fazer algumas alteraes. O primeiro a passagem de tipos definidos pelo usurio que contm strings de tamanho fixo ou byte arrays para APIs. No Visual Basic.NET talvez voc tenha que alterar seu cdigo, incluindo o atributo MarshallAs (a partir do System.Runtime.InteropServices) para cada string de tamanho fixo ou byte array no tipo definido pelo usurio. O segundo caso o uso do tipo de varivel As Any em um comando Declare. Isto no suportado no Visual Basic.NET. Variveis do tipo As Any sempre foram usadas para passar uma varivel do tipo string ou Null; voc pode substituir este uso no Visual Basic 6.0 declarando duas formas da API, uma com longs, uma com strings. Por exemplo, a API GetPrivateProfileString API tem um parmetro lpKeyName do tipo As Any: Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Voc pode remover o As Any substituindo o Declare por duas verses; uma que aceita um long, e uma que aceita um string: Private Declare Function GetPrivateProfileStringKey Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Quando voc quer passar o valor Null para a API, voc usa a verso GetPrivateProfileStringNullKey. Desta forma a funo pode ser atualizada para o Visual Basic.NET. A ltima rea onde voc pode ter que fazer algumas alteraes se voc estiver usando APIs que efetuam criao de thread, Windows subclassing, message queue hooking, e assim por diante. Algumas destas funes causaro um erro de run-time no Visual Basic.NET. Muitas destas APIs possuem equivalentes no Visual Basic.NET ou no .NET Framework. Voc ter que corrigir estas situaes caso a caso.
Windows Forms possui um novo conjunto de comandos grficos que substituem os mtodos Form Circle, CLS, PSet, Line e Point. Como o novo modelo de objeto muito diferente do anterior no Visual Basic 6.0, estes mtodos no podem ser atualizados. Para o controle de Timer, a definio da propriedade Interval como 0 no desabilita o timer; ao invs disto o intervalo redefinido como 1. Nos seus projetos Visual Basic 6.0, voc deve configurar Enabled para False ao invs de definir o Interval para 0. Windows Forms possui dois controles de menu, MainMenu e ContextMenu, sendo que o Visual Basic 6.0 possui apenas um controle de menu, Menu, que pode ser aberto como um MainMenu ou um ContextMenu. Controles de menu so atualizados para controles MainMenu, mas voc no poder us-los como ContextMenus; voc ter que recriar seus ContextMenus. Windows Forms no possui suporte para Dynamic Data Exchange (DDE). Windows Forms no suporta o mtodo Form.PrintForm. Embora Windows Forms tenha suporte para a funcionalidade drag-and-drop, o modelo de objeto muito diferente do usado no Visual Basic 6.0. Dessa forma, as propriedades e mtodos drag-and-drop do Visual Basic 6.0 no podem ser atualizados. O framework .NET possui um objeto Clipboard aprimorado (System.WinForms.Clipboard) que oferece mais funcionalidade e suporta mais formatos clipboard do que o objeto Clipboard do Visual Basic 6.0. Entretanto, devido s diferenas nos modelos de objeto, comandos clipboard no podem ser atualizados automaticamente. Windows Forms no suporta a propriedade Name para formulrios e controles em tempo de execuo; dessa forma voc no deve escrever cdigo que repete a coleo Controls procurando um controle com um certo nome (esta funcionalidade agora est disponvel usando-se as classes .NET System.Reflection.) Para garantir que seus formulrios sejam atualizados para o tamanho certo, voc deve sempre usar o ScaleMode padro de twips nas suas aplicaes. Durante a atualizao, o Visual Basic.NET transforma suas coordenadas de formulrios de twips para pixels.