VB6 para C#
Um conversor VB6 -> C# 2017 baseado em VB6.
Uso
Grátis para usar. Livre para desembolsar. Livre para contribuir. Livre para perguntar. Livre para vender. Livre para vender em seu próprio nome... Livre para fazer qualquer coisa, exceto dizer que não posso (consulte LICENÇA).
Veja abaixo informações básicas. Consulte o Wiki para informações mais detalhadas. Sinta-se à vontade para entrar em contato para obter suporte.
Início rápido
- Abra o arquivo
prj.vbp
, inicie o programa (requer o IDE VB6). - Insira alguns valores de configuração no formulário
Config
por meio do botão. - Agora que você selecionou seu projeto, clique no botão
SCAN
. Isso ajuda o conversor a saber a diferença entre métodos sem parênteses e variáveis/constantes. Ele também cria uma lista completa de importações (que podem ser limpas no IDE do VS 2019 via ^K^E). - Se desejar, clique em
SUPPORT
para gerar a estrutura básica de suporte do projeto.- Alternativamente, os arquivos
VBExtension.cs
e VBConstants.cs
podem ser copiados diretamente da raiz do projeto e incluídos em outro lugar.
- Em seguida, insira um nome de arquivo e clique em
Single File
para tentar converter o arquivo inserido ao lado dele.
Se você deseja converter o projeto inteiro, basta clicar em ALL
e ele fará a varredura, a geração de suporte e a conversão de todo o projeto imediatamente.
NOTA: Pode não ser o mais rápido, ainda requer um esforço manual, mas é mais rápido do que fazer TUDO manualmente!
Atualizações 2021-12-01
A versão original do conversor abordou o problema bloco a bloco, separando cada unidade lógica do programa em sua própria string e convertendo-a por conta própria. Como resultado, o conversor fez várias passagens e basicamente funcionou extremamente lento. Depois de atualizar o linter para não usar essa abordagem, mas simplesmente percorrer o código de cima para baixo, parecia evidente que o conversor poderia fazer a mesma coisa com a mesma precisão.
Então, hoje foi lançada a v2 do conversor, junto com a v1, por meio de botões de opção no formulário principal. Sinta-se à vontade para misturar e combinar, converter o projeto inteiro com um e depois arquivos individuais com o outro. Esperançosamente, com as duas abordagens completamente diferentes, uma delas funcionará melhor que a outra e resultará em menos trabalho. Novamente, ambos ainda têm apenas uma conversão de 80-90%. Há muitas coisas que você terá que fazer manualmente e verificar novamente (como limites de loop), mas, novamente, é melhor mudar todos os &
s em seu código VB6 para +
s para C#.
Como faço para...?
Existem muitas dúvidas quando se trata de conversão. Se você deseja apenas saber como este conversor lida com padrões específicos, consulte a seção Como faço para...? página em nosso wiki.
Quer você use este conversor ou não, oferecemos nossa solução para quebra-cabeças de conversão comumente encontrados. Nossas soluções são rápidas, diretas e geralmente não usam muita programação ou sobrecarga de contexto. Embora eles possam contar com nosso módulo de extensão, tudo é código C# nativo e, geralmente, bastante semelhante ao que você fez no VB6.
Requisitos
Requisitos do conversor
- O conversor é executado no IDE VB6. Você sabe, o IDE do programa que você está tentando converter.
Requisitos do programa convertido
- Visual Studio oferece suporte a alguma versão relativamente moderna do C#. Ou alternativo.
- Power Packs do Visual Basic / Outro link / Fornecido no Repo, pois pode ser difícil encontrar alguns dias
- Permite o uso de funções VB padrão como
Mid
, Trim
, Abs
, DateDiff
, etc, diretamente no código C#. - Garante 99,9% de compatibilidade com a funcionalidade VB6 (exceto para
Format
...), sem a necessidade de uma biblioteca de caixa preta de terceiros (é da MS, portanto é uma caixa preta de terceiros). - Fácil de iterar depois de convertido e instalado e funcionando.
Instruções
Consulte o wiki para obter mais informações sobre o uso.
Considerações de projeto
- Simples – Não foi projetado para fazer uma conversão de 100%. Apenas talvez 80% - 90% do trabalho pesado.
- Baseado em VB6 - Porque, por que não? Você precisa ter um compilador VB6 funcionando se estiver convertendo do vb6 de qualquer maneira.
- Personalizado - Foi criado para um projeto pessoal e, portanto, é adaptado especificamente para nosso caso de uso. Mas não há nenhuma razão para que alguém não possa investigar a lógica e ajustá-la para qualquer um dos seus próprios problemas.
- Oportunista - Este código depende fortemente da relativa uniformidade do IDE VB6:
- O espaçamento é relativamente consistente porque o IDE o impõe.
- A capitalização de palavras-chave pode ser garantida.
- Aproveitamos os Microsoft Power Packs e NÃO precisamos converter a maioria das instruções principais do VB6. Além disso, você pode continuar a USE instruções como
DateDiff
, Left
, Trim
como faria em VB. Ou, se preferir, comece a migrar deles APÓS a conversão. Simplesmente utilizamos a biblioteca da Microsoft para obter compatibilidade máxima e, portanto, não temos uma grande biblioteca de substituição de strings, nem dependemos tanto quanto alguns conversores de nossas próprias DLLs ou bibliotecas (geramos algumas para facilitar a sintaxe, mas o o resultado final é código C# puro).
- Não presumido - Supõe que o código compilado em VB, portanto, não pressupõe que a referência que não pode resolver não será encontrada.
- Importações universais - Importa CADA módulo de código, assim como o VB6 fez automaticamente. Faça o Visual Studio decidir quais serão usados simplesmente otimizando as importações após a conversão.
- C# 2017 – Este é um lançamento tardio. Nunca houve uma solução freeware para VB6 -> C#, e agora que o VB.NET está mais ou menos descontinuado, por que não?
Problemas conhecidos (somente v1)
- Atualmente, o conversor muitas vezes recusa um arquivo que contém a palavra 'Propriedade' em qualquer lugar (exceto uma declaração de propriedade). Embora isso seja um problema e provavelmente será corrigido, foi encontrado no final da utilidade do projeto (e, portanto, não urgente na lista de reparos) e onde atrapalhou o progresso, a variável que continha a palavra '...Propriedade' foi simplesmente renomeado temporariamente para algo como '...Prppty' e depois alterado novamente no arquivo convertido.
- Isto foi resolvido na versão 2, mas ainda pode aparecer em alguns casos na v1.
Desvantagens
- Isso não produzirá código que será compilado na forma gerada. A última milha é simplesmente a mais cara de automatizar e, muitas vezes, é melhor fazê-la manualmente. Parecia mais conveniente fazer algo chegar ao máximo e terminar quaisquer casos extremos ou conversão final manualmente.
- Personalização limitada da UI (mas personalização ilimitada baseada em código). Esta não é a solução mais personalizável. A menos, é claro, que você queira mergulhar em um pouco do código-fonte do conversor. Mas é por isso que está disponível.
- Saída não lintada. O código resultante é uma bagunça estilisticamente. É para isso que serve um IDE moderno. Toda a formatação incorreta pode ser limpa com ^K^D. Importações não utilizadas com ^K^E. E há muitos {'s e}'s extras que você provavelmente desejará excluir.
- O conversor atualmente é MUITO ruim nos limites do loop. Desculpe, é uma das armadilhas de uma conversão VB6->C# e não há muita lógica em como ela é convertida. É tedioso, mas faça uma pesquisa em todo o projeto por todos os loops for e inspecione manualmente os limites.
- Existe um método extra para cada evento. Um para a assinatura correta, outro para a assinatura original. Na maioria dos casos, a redundância é desnecessária, mas proporcionou a conversão mais fácil. Eles podem ser reduzidos a um único método na maioria dos casos (mas não em todos, e é por isso que não o faço).
NOTA: Na maioria dos lugares que o conversor sabe que haverá um problema, ele anotará o código com um comentário // TODO:
:. Certifique-se de abordar minuciosamente cada um deles.
Vantagens
- É grátis.
- Você tem a fonte (personalize-a, tanto faz).
- Faça tudo ou apenas um arquivo de cada vez.
- É muito melhor do que fazer tudo manualmente.
- Isso lhe dará uma boa visão do que está acontecendo, sem a necessidade de TODO o esforço manual para fazer uma conversão simples.
- Não é a conversão mais rápida, mas simples (mas a v2 ficou muito melhor). Inspecione funções como
ConvertSub
ou ConvertPrototype
.- Mas pense bem... Você deseja converter de uma só vez, e não atropelar repetidamente durante a execução da conversão.
- Permite a inspeção de como algo está sendo convertido. Não gostou da saída? Mude isso.
- Você pode colocar um ponto de interrupção VB6 em qualquer lugar que desejar e parar. Além disso, basta adicionar uma linha como
If LineN = 387 Then Stop
e o conversor irá parar ali mesmo.
Extras
- Um linter de código VB6.
?Lint
. Elimine o máximo de dívidas tecnológicas antes mesmo de iniciar o processo. - Formulário VB6 para XAML
Possibilidades Futuras
O projeto está em grande parte como está. Funciona no que faz. No entanto, algumas coisas para ficar de olho são coisas como "Propriedades da extensão". Se o C# alguma vez implementou isso ou algo parecido, a conversão de .Visible = True
se tornará muito mais direta. Como o C# agora usa um enum em vez de um booleano, isso não é possível, mas seria com esse recurso.
Contato
- Se você tiver alguma dúvida, preocupação ou simplesmente quiser algumas dicas rápidas, sinta-se à vontade para abrir um problema. Não posso garantir muito, mas tento!