Como migrar um sistema VB6 em 2026 (e por que não esperar mais)
O sistema em Visual Basic 6 ainda abre, ainda grava e ainda imprime. A pergunta não é se ele funciona hoje — é quanto tempo mais ele funciona sem que um OCX, um driver ou a saída do último programador vire uma parada. Este guia mostra como migrar VB6 para .NET por partes, com a empresa rodando.
O que ainda funciona e o que é risco
Comecemos pelos fatos, porque há muito alarme e muito otimismo sobre VB6. O ambiente de desenvolvimento do Visual Basic 6 saiu do suporte da Microsoft em 2008. Já o runtime — as bibliotecas que fazem o executável rodar — continua acompanhando o Windows por compatibilidade: a Microsoft mantém uma declaração de suporte para ele nas versões atuais, incluindo o Windows 11. É a política que ficou conhecida como "It Just Works".
Então, sim: um sistema VB6 no Windows 11 normalmente roda. O problema está no que fica fora dessa garantia e no que não evolui:
- Componentes distribuídos com o sistema. A garantia cobre o runtime central e uma lista definida de arquivos. OCX e DLLs de terceiros — grades, relatórios, controles de comunicação — dependem do fornecedor de cada um, e muitos desses fornecedores não existem mais.
- 32 bits para sempre. O VB6 só gera executáveis de 32 bits. Eles rodam no Windows de 64 bits, mas só carregam DLLs e drivers de 32 bits. O provedor Jet 4.0, usado para abrir bancos Access antigos, só existe em 32 bits; drivers de banco e componentes novos frequentemente só saem em 64.
- Sem evolução. Nenhum recurso novo de linguagem, de interface ou de segurança. Tudo que o sistema precisar de moderno — API REST, autenticação atual, acesso pelo celular — vira gambiarra.
- A IDE. Instalar o ambiente do VB6 numa máquina atual é um exercício de paciência sem suporte. Muitas empresas mantêm uma única máquina virtual antiga onde o sistema ainda compila.
- Pessoas. O risco mais concreto. O conhecimento do sistema costuma estar concentrado em uma ou duas pessoas, e o mercado de profissionais VB6 diminui a cada ano.
Por que não esperar mais
Não porque o sistema vai parar numa data marcada — não há essa data. Mas porque as condições para uma migração tranquila pioram com o tempo: quem conhece as regras se aposenta ou sai, a máquina que compila envelhece, um fornecedor de hardware lança um driver só em 64 bits, e a migração que podia ser planejada vira emergência. Migrar por partes, com calma, só é possível enquanto o sistema antigo ainda está estável o bastante para conviver com o novo.
O método é o mesmo que aplicamos em qualquer migração de software legado: entender como o sistema funciona, documentar as regras e só então escrever o sistema novo, por partes, com o VB6 rodando ao lado. A seguir, o que muda no caso específico do VB6.
Inventário: o que o seu VB6 usa
O ponto de partida é o arquivo de projeto .vbp. As linhas Reference=
listam as bibliotecas COM referenciadas e as linhas Object= listam os controles OCX.
É o inventário mais honesto que existe, porque é o que o compilador realmente usa. A partir dele:
- OCX e controles ActiveX. Os da própria Microsoft (MSCOMCTL com ListView e TreeView, FlexGrid, CommonDialog) e os de terceiros (grades, calendários, editores). Para cada um: quem fornece, se ainda existe, se há equivalente em .NET.
- Referências COM. DAO, ADO (ADODB), bibliotecas do Office para automação do Excel e do Word, componentes de outros fornecedores e DLLs ActiveX feitas pela própria empresa — às vezes outros projetos VB6 cujo fonte ninguém sabe onde está.
- Acesso a dados. DAO com bancos Access, ADO com SQL Server ou Oracle, RDO em sistemas mais antigos, Data Environment, controle Data ligado direto na tela. É comum encontrar dois ou três desses no mesmo sistema.
- Relatórios. Crystal Reports (pelo OCX ou pela biblioteca RDC), DataReport, relatórios montados à mão com o objeto
Printer, exportações para Excel. - Hardware e comunicação. MSComm para porta serial (balanças, leitores, impressoras), Winsock para comunicação por rede, chamadas
Declarea DLLs de fornecedores e à API do Windows. - Configuração e arquivos. Arquivos
.ini, chaves de registro viaGetSetting/SaveSetting, arquivos texto trocados com outros sistemas, pastas compartilhadas.
Complete com o uso real: quais telas são abertas todo dia, quais relatórios alguém de fato imprime, quais rotinas rodam só no fechamento do mês. Isso define o que migrar primeiro — e o que não migrar.
Por que o assistente de upgrade e os conversores não resolvem
O Visual Studio, das versões 2002 a 2008, trazia um assistente de atualização de VB6 para VB.NET. A
partir do Visual Studio 2010 ele deixou de existir. Quem o usou lembra do resultado: código VB.NET
cheio de comentários UPGRADE_WARNING e UPGRADE_TODO, dependente de uma
biblioteca de compatibilidade que a própria Microsoft depois marcou como obsoleta e que não existe
no .NET atual.
Conversores comerciais mais novos fazem um trabalho melhor na sintaxe, mas esbarram no mesmo limite: a linguagem é o de menos. As diferenças que importam são de semântica e de arquitetura:
- Tipos que mudaram de tamanho. O
Integerdo VB6 tem 16 bits; no .NET, 32.LongvirouInteger,CurrencyvirouDecimal,Variantnão tem equivalente direto. - Passagem de parâmetros. No VB6 o padrão é
ByRef; no VB.NET,ByVal. Uma rotina que alterava o argumento de propósito deixa de alterar, sem erro de compilação. - Arrays de controles, propriedades padrão, strings de tamanho fixo,
On Error Resume Next— tudo isso tem tradução forçada, que compila e se comporta de um jeito sutilmente diferente. - A arquitetura. A regra de negócio continua no
Command1_Click, o SQL continua montado em string dentro do formulário, e o OCX sem equivalente vira um invólucro ou um buraco.
O resultado é um sistema VB.NET ou C# que ninguém escreveu, ninguém entende e que carrega todos os problemas do original. Aprofundamos o tema em conversor automático de código legado funciona? Um conversor pode servir como ferramenta pontual de leitura; como estratégia, não.
Documentar as regras antes de escrever código
Com o inventário pronto, a etapa central é extrair do código o que o sistema sabe: regras de
negócio em linguagem de negócio, cálculos com exemplos numéricos, fluxos, integrações e o
significado real de cada campo do banco. Em VB6 essas regras moram nos eventos dos formulários, nos
módulos .bas com funções globais, nas classes .cls e, frequentemente, em
consultas e procedures no banco.
Essa documentação é validada com quem usa o sistema e vira a especificação do sistema novo — e um ativo da empresa, que vale mesmo que a tecnologia mude de novo. IA ajuda a ler o código mais rápido e a rascunhar descrições de rotinas; a validação é humana. O passo a passo está em como documentar um sistema legado sem documentação.
Para onde migrar
A escolha depende de quem usa o sistema, de onde e com que equipamento. Na maioria dos casos, a linguagem de destino é C# no .NET atual (hoje, o .NET 10, versão LTS), mas a forma do sistema varia.
| Destino | Quando faz sentido | Atenção |
|---|---|---|
| Web (C# com ASP.NET Core) | Usuários em vários locais, acesso pelo navegador, integração com outros sistemas, hospedagem em nuvem | Hardware local (serial, impressoras específicas) precisa de um agente instalado na máquina ou de outra solução |
| Desktop .NET (WinForms ou WPF) | Digitação intensa, uso em rede local, integração pesada com equipamentos | Continua restrito ao Windows; a regra deve ficar fora das telas para não repetir o problema |
| Aplicativo Android e iOS | Equipe em campo: vendedores, técnicos, entregas, inventário | Quase sempre complementa a web ou o desktop, não substitui o sistema inteiro |
Em resumo, migrar Visual Basic 6 para .NET quase sempre significa VB6 para C#. Uma dúvida frequente: VB.NET ou C#? O VB.NET continua suportado no .NET, mas a Microsoft anunciou em 2020 que não planeja evoluir o Visual Basic como linguagem. A sintaxe parecida com a do VB6 também é uma armadilha: dá a impressão de que basta portar, quando o que precisa mudar é a arquitetura. Para um sistema que vai durar mais quinze anos, C# é a escolha mais segura. Na página de migração VB6 detalhamos como conduzimos cada destino, e o caminho para o celular está em aplicativos Android e iOS.
Migração incremental: o VB6 e o .NET lado a lado
O sistema novo não precisa estar pronto para entrar em uso. A estratégia é o padrão de estrangulamento: a parte nova assume uma função por vez, o VB6 continua com o resto, e cada etapa tem caminho de volta. Há três formas práticas de fazer os dois conviverem.
1. O VB6 chama uma API nova
A regra de negócio migrada passa a viver numa API em ASP.NET Core. O VB6 consegue chamá-la por HTTP
usando objetos COM que já vêm no Windows, como MSXML2.ServerXMLHTTP ou
WinHttp.WinHttpRequest.5.1. Ler a resposta em JSON exige um parser em VB6 (há
bibliotecas de código aberto para isso) ou um formato de retorno mais simples. É a forma mais
desacoplada: a API é a mesma que a web, o app e outros sistemas vão usar.
2. O VB6 chama um componente .NET via COM
O .NET permite expor classes como componentes COM, e o VB6 sabe usar COM. Com o .NET Framework
4.8 é o caminho mais conhecido: a classe é marcada como visível para COM, registrada com a
ferramenta regasm, que também gera a biblioteca de tipos, e o VB6 a referencia como
qualquer outra biblioteca. O .NET atual também permite hospedar componentes COM no Windows, com
mais etapas — a biblioteca de tipos, por exemplo, não é gerada automaticamente, o que complica a
referência no VB6.
Dois cuidados. Primeiro, bitness: o VB6 é um processo de 32 bits e só carrega componentes in-process de 32 bits, então o componente .NET tem de ser registrado e executado como 32 bits. Segundo, mantenha a camada COM fina: uma fachada que só repassa chamadas para uma biblioteca de regra. Se essa biblioteca for escrita para .NET Standard 2.0, ela pode ser usada tanto pela fachada em .NET Framework 4.8 quanto pela API em .NET atual — a regra é escrita uma vez e sobrevive ao desligamento do VB6.
3. Troca de tela por tela
A forma mais simples: o item de menu do VB6 que abria uma tela passa a abrir a tela nova no navegador, ou um executável .NET. Os dois sistemas leem o mesmo banco durante a transição, com regras claras sobre quem grava o quê. Funciona muito bem para consultas, relatórios e cadastros periféricos, que costumam ser a primeira fatia.
Imagine uma indústria com um sistema VB6 de apontamento de produção sobre Access, com uma balança ligada por MSComm. A primeira fatia é a consulta de ordens de produção na web, lendo o mesmo banco. A segunda leva o cálculo de consumo de matéria-prima para uma API, chamada também pelo VB6. A balança fica para o fim, já com a leitura serial reescrita em .NET. Em nenhum momento a fábrica para.
Dados
Muitos sistemas VB6 usam Access (arquivos .mdb) em pasta compartilhada. O formato tem
limite de 2 GB por arquivo, é sensível a quedas de rede e a corrupção que exige "compactar e
reparar". Nesses casos, migrar o banco para SQL Server ou PostgreSQL costuma ser uma das primeiras
etapas — e o próprio VB6, via ADO, consegue passar a usar o banco novo enquanto as telas são
substituídas.
Os cuidados de sempre: datas fictícias usadas como "sem data", campos reaproveitados, valores monetários gravados em ponto flutuante, registros órfãos que o sistema antigo tolerava. Migração de dados se ensaia em ambiente de teste, com conferência de totais pelos usuários, antes de cada entrada em produção. Detalhes em migração de banco de dados e em migração de banco de dados legado sem perder dado.
Roteiro resumido
- Inventário a partir do
.vbp: OCX, referências COM, acesso a dados, relatórios, hardware, configuração. - Levantamento de uso real: o que é usado todo dia, o que é sazonal, o que ninguém abre.
- Documentação de regras, cálculos, integrações e dados, validada por quem opera.
- Escolha do destino: web, desktop .NET, aplicativo — ou uma combinação.
- Regra de negócio numa camada própria, com testes escritos a partir da documentação.
- Mecanismo de convivência: API, componente COM ou troca de tela por tela.
- Primeira fatia pequena, com caminho de volta.
- Dados migrados e conferidos antes de cada etapa.
- Desligamento tela a tela, até o executável VB6 ficar sem uso e ser arquivado.
Perguntas frequentes
Um sistema VB6 roda no Windows 11?
Normalmente, sim. O runtime do VB6 acompanha o Windows e a Microsoft mantém uma declaração de suporte para ele nas versões atuais, incluindo o Windows 11. O risco está nos OCX e DLLs de terceiros, que dependem de cada fornecedor, na restrição a 32 bits e na falta de evolução da plataforma. Rodar hoje não garante que cada atualização de driver, banco ou equipamento continue compatível.
Dá para converter VB6 para C# automaticamente?
Existem conversores, e eles traduzem a sintaxe. O que não traduzem é a arquitetura: a regra continua dentro do evento do botão, o SQL continua no formulário e os OCX sem equivalente viram adaptadores. Diferenças de semântica, como o tamanho do Integer e a passagem de parâmetros por referência, geram erros que compilam. O resultado é um legado novo em C#. Serve como apoio de leitura, não como estratégia.
É melhor migrar para VB.NET ou para C#?
Para um sistema que vai durar muitos anos, C#. O VB.NET continua suportado no .NET, mas a Microsoft anunciou em 2020 que não planeja evoluir o Visual Basic como linguagem, e o mercado de profissionais, bibliotecas e exemplos é muito maior em C#. A semelhança de sintaxe com o VB6 ajuda menos do que parece, porque o que precisa mudar é a arquitetura.
Dá para migrar aos poucos, com o VB6 ainda em uso?
Dá, e é o recomendado. O VB6 pode chamar uma API nova por HTTP, usar um componente .NET exposto via COM (registrado como 32 bits) ou simplesmente abrir as telas novas no lugar das antigas. Os dois sistemas convivem sobre os mesmos dados, e cada parte só sai do VB6 depois de validada por quem usa.
O que fazer com OCX que não têm mais fornecedor?
Primeiro, descobrir o que cada um faz no sistema: muitas vezes é uma grade ou um calendário, que tem equivalente direto em .NET. Os críticos, como comunicação com equipamentos ou geração de relatório, entram cedo no plano de migração, porque são os que mais podem quebrar numa atualização do Windows ou numa troca de máquina. Enquanto isso, guarde os instaladores e as versões exatas que funcionam.
Conclusão
Um sistema VB6 que funciona não é emergência — mas é um prazo que corre contra você, porque cada ano reduz as pessoas que conhecem o sistema e as máquinas onde ele compila. A migração que dá certo começa pelo inventário e pela documentação das regras, escolhe o destino pelo uso real e substitui o VB6 por partes, com caminho de volta em cada etapa.
A NasteSoft e seus parceiros já migraram bancos de dados e aplicações em Delphi, VB6 e .NET. Se o seu sistema VB6 ainda sustenta a operação, este é o melhor momento para planejar a saída — enquanto ainda dá para fazer isso com calma.
Tem um sistema VB6 para migrar?
Começamos entendendo e documentando o sistema. O código novo vem depois, por partes.