VB6 a C#
Un conversor VB6 -> C# 2017 basado en VB6.
Uso
De uso gratuito. Libre de bifurcar. Gratis para contribuir. Gratis para preguntar. Gratis para vender. Libre de vender bajo su propio nombre... Libre de hacer casi cualquier cosa excepto decir que no puedo (Ver LICENCIA).
Consulte a continuación para obtener información básica. Consulte la Wiki para obtener información más detallada. No dude en contactarnos para obtener ayuda.
Inicio rápido
- Abra el archivo
prj.vbp
, inicie el programa (requiere VB6 IDE). - Ingrese algunos valores de configuración en el formulario
Config
mediante el botón. - Ahora que ha seleccionado su proyecto, haga clic en el botón
SCAN
. Esto ayuda al convertidor a conocer la diferencia entre métodos sin paréntesis y variables/constantes. También crea una lista completa de importaciones (que se pueden limpiar en el IDE de VS 2019 a través de ^K^E). - Si lo desea, haga clic en
SUPPORT
para generar la estructura básica de soporte del proyecto.- Alternativamente, los archivos
VBExtension.cs
y VBConstants.cs
podrían copiarse directamente desde la raíz del proyecto e incluirse en otro lugar.
- Luego, ingrese un nombre de archivo y haga clic en
Single File
para intentar convertir el archivo que ingresa al lado.
Si desea convertir todo el proyecto, simplemente haga clic en ALL
y realizará el escaneo, la generación de soporte y la conversión completa del proyecto de inmediato.
NOTA: Puede que no sea el más rápido, aún requiere un esfuerzo manual, ¡pero es más rápido que hacerlo TODO manualmente!
Actualizaciones 2021-12-01
La versión original del convertidor abordó el problema bloque por bloque, separando cada unidad de programa lógico en su propia cadena y convirtiéndola por sí sola. Como resultado, el convertidor realizó múltiples pasadas y básicamente funcionó extremadamente lento. Después de actualizar el linter para no utilizar este enfoque, sino simplemente ejecutar el código de arriba a abajo, parecía evidente que el convertidor podía hacer lo mismo con la misma precisión.
Entonces, hoy se lanzó la v2 del convertidor, junto con la v1, a través de botones de opción en el formulario principal. Siéntete libre de mezclar y combinar, convertir todo el proyecto con uno y luego archivos individuales con el otro. Con suerte, con dos enfoques completamente diferentes, uno de los dos funcionará mejor que el otro y resultará en menos trabajo. Nuevamente, ambos tienen solo una conversión del 80-90%. Hay muchas cosas que tendrás que hacer a mano y volver a verificar (como límites de bucle), pero nuevamente, seguro que es mejor cambiar todos los &
s en tu código VB6 a +
s para C#.
¿Cómo puedo...?
Hay muchas preguntas cuando se trata de conversión. Si solo desea saber la forma en que este convertidor trata patrones específicos, consulte ¿Cómo hago...? página en nuestra wiki.
Ya sea que utilice este convertidor o no, le brindamos nuestra solución a los problemas de conversión que se encuentran comúnmente. Nuestras soluciones son rápidas, van al grano y, por lo general, no utilizan mucha programación ni sobrecarga de contexto. Si bien pueden depender de nuestro módulo de extensión, todo es código C# nativo y, en general, bastante similar a lo que hizo en VB6.
Requisitos
Requisitos del convertidor
- El convertidor se ejecuta en VB6 IDE. Ya sabes, el IDE del programa que estás intentando convertir.
Requisitos del programa convertido
- Visual Studio admite alguna versión relativamente moderna de C#. O alternativo.
- Paquetes de energía de Visual Basic / Otro enlace / Proporcionado en el repositorio ya que puede ser difícil de encontrar algunos días
- Permite el uso de funciones estándar de VB como
Mid
, Trim
, Abs
, DateDiff
, etc., directamente en código C#. - Garantiza una compatibilidad del 99,9% con la funcionalidad VB6 (excepto
Format
...), sin la necesidad de una biblioteca de caja negra de terceros (es de MS, por lo que es una caja negra de terceros). - Fácil de iterar una vez que esté convertido y en funcionamiento.
Instrucciones
Consulte la wiki para obtener más información sobre el uso.
Consideraciones de diseño
- Simple: no está diseñado para realizar una conversión del 100 %. Quizás solo entre el 80% y el 90% del trabajo duro.
- Basado en VB6: porque, ¿por qué no? Debe tener un compilador VB6 que funcione si está convirtiendo DESDE vb6 de todos modos.
- Personalizado: se creó para un proyecto personal y, por lo tanto, está diseñado específicamente para nuestro caso de uso. Pero no hay ninguna razón por la que alguien no pueda investigar la lógica y modificarla para cualquiera de sus propios problemas.
- Oportunista: este código se basa en gran medida en la relativa uniformidad del IDE de VB6:
- El espaciado es relativamente consistente porque el IDE lo impone.
- Se puede garantizar la capitalización de palabras clave.
- Aprovechamos los Power Packs de Microsoft y NO necesitamos convertir la mayoría de las declaraciones principales de VB6. Además, puede continuar USANDO declaraciones como
DateDiff
, Left
, Trim
como lo haría en VB. O, si lo prefiere, comience a migrar lejos de ellos DESPUÉS de la conversión. Simplemente utilizamos la biblioteca de Microsoft para obtener la máxima compatibilidad y, por lo tanto, no tenemos una biblioteca de reemplazo de cadenas grande, ni dependemos tanto como algunos convertidores de nuestras propias DLL o bibliotecas (generamos algunas para facilitar la sintaxis, pero las El resultado final es código C# puro).
- Sin asumir: asume que el código se compiló mientras estaba en VB, por lo que no asume que no se encontrarán las referencias que no puede resolver.
- Importaciones universales: importa CADA módulo de código, tal como lo hizo VB6 automáticamente. Haga que Visual Studio haga el trabajo de decidir cuáles se utilizan simplemente optimizando las importaciones después de la conversión.
- C# 2017: llegó tarde. Nunca ha existido una solución gratuita para VB6 -> C#, y ahora que VB.NET está más o menos descontinuado, ¿por qué no?
Problemas conocidos (solo v1)
- Actualmente, el convertidor a menudo se opone a un archivo que contiene la palabra 'Propiedad' en cualquier parte (que no sea una declaración de propiedad). Si bien esto es una molestia y probablemente se solucionará, se encontró que hacia el final de la utilidad del proyecto (y por lo tanto no es urgente en la lista de reparación), y donde obstaculizó el progreso, la variable que contenía la palabra '...Propiedad' simplemente se le cambió el nombre temporalmente a algo como '...Prppty' y luego se volvió a cambiar en el archivo convertido.
- Esto se solucionó en la versión 2, sin embargo, es posible que aún aparezca en algunos casos en la versión 1.
Desventajas
- Esto no producirá código que se compilará en su forma generada. La última milla es simplemente la más costosa de automatizar y, a menudo, es mejor realizarla manualmente. Parecía más conveniente hacer que algo llegara hasta el final y terminar los casos extremos o la conversión final a mano.
- Personalización limitada de la interfaz de usuario (pero personalización ilimitada basada en código). Esta no es la solución más personalizable. A menos, por supuesto, que quieras profundizar en un pequeño código fuente del convertidor. Pero es por eso que está disponible.
- Salida sin pelar. El código resultante es un desastre estilísticamente. Para eso sirve un IDE moderno. Todo el formato incorrecto se puede limpiar con ^K^D. Importaciones no utilizadas con ^K^E. Y hay muchos { y } adicionales que probablemente querrás eliminar.
- El convertidor actualmente es REALMENTE malo en los límites del bucle. Lo sentimos, es uno de los errores de una conversión VB6->C#, y no hay mucha lógica en cómo se convierte. Es tedioso, pero realice una búsqueda en todo el proyecto de todos los bucles for e inspeccione manualmente los límites.
- Hay un método extra para cada evento. Uno para la firma correcta y otro para la firma original. En la mayoría de los casos, la redundancia es innecesaria, pero proporcionó la conversión más sencilla. Estos se pueden reducir a un solo método en la mayoría de los casos (pero no en todos, por eso no lo hago).
NOTA: En la mayoría de los lugares donde el convertidor sabe que habrá un problema, anotará el código con un comentario // TODO:
:. Asegúrese de abordar detalladamente cada uno de estos.
Ventajas
- Es gratis.
- Tienes la fuente (personalízala, lo que sea).
- Haga todo o solo un archivo a la vez.
- Es mucho mejor que hacerlo todo a mano.
- Le dará una buena idea de lo que está sucediendo, sin tener que hacer TODO el esfuerzo manual para realizar una simple conversión.
- No es la conversión más rápida, pero sí sencilla (pero la versión 2 acaba de mejorar mucho). Inspeccione funciones como
ConvertSub
o ConvertPrototype
.- Pero piénselo... Lo que busca es realizar una conversión de una sola vez, no repetirla una y otra vez durante la ejecución de la conversión.
- Permite inspeccionar cómo se está convirtiendo algo. ¿No te gusta el resultado? Cámbialo.
- Puede poner un punto de interrupción VB6 en cualquier lugar que desee y detenerse. Además, simplemente agregue una línea como
If LineN = 387 Then Stop
y el convertidor se detendrá allí mismo.
Extras
- Un linter de código VB6.
?Lint
. Eliminar la mayor cantidad posible de deuda tecnológica incluso antes de comenzar el proceso. - Formulario VB6 a XAML
Posibilidades futuras
El proyecto está en gran medida tal como está. Funciona en lo que hace. Sin embargo, algunas cosas a las que hay que prestar atención son cosas como "Propiedades de extensión". Si C# alguna vez implementó esto o algo parecido, convertir .Visible = True
se vuelve mucho más sencillo. Debido a que C# ahora usa una enumeración en lugar de un valor booleano, esto no es posible, pero sí lo sería con esta característica.
Contacto
- Si tiene alguna pregunta, inquietud o simplemente desea recibir algunos consejos rápidos, no dude en abrir un problema. No puedo garantizar mucho, ¡pero lo intento!