2008-09-12 38 views
16

Mantengo una aplicación antigua solo para PC escrita en Delphi 7. Aunque Delphi me ha servido muy bien en el pasado, ahora solo lo uso para esta aplicación y encuentro que mis habilidades disminuyen. Su sintaxis es muy diferente de mis idiomas de trabajo diurno de Java/Ruby, así que me lleva más tiempo entrar en la rutina de escribir código nuevo, además es tan antiguo que no he usado muchas interfaz s por lo que el código no es manejado que me parece antiguo ahora!¿Qué herramientas existen para convertir una aplicación Delphi 7 en C# y .Net framework?

Muchos de mis usuarios se están moviendo a Vista que pueden ejecutar la aplicación en modo compatibilidad o pueden tener problemas GPF dependiendo de cómo su PC está configurada por su departamento de TI, así que tengo que hacer algún mantenimiento en la aplicación. Me pregunto si debería saltar a una pila más familiar.

¿Existe alguna herramienta automatizada que realice la tarea de convertir el código base en C#, dejándome concentrado en la conversión de cualquier componente no estándar? Estoy usando un componente de base de datos incrustado llamado AbsoluteDatabase que es compatible con BDE y utiliza SQL estándar en todas partes, y un componente de navegador HTML Delphi nativo que se puede intercambiar con algo del mundo de Microsoft.

¿Qué tan buenas son estas herramientas de conversión?

Respuesta

14

No conozco ninguna herramienta automatizada para realizar esa conversión. Personalmente, le sugiero que se quede con Delphi, tal vez simplemente actualice a una nueva versión. He visto un par de códigos DOM que intentan convertir de Delphi a C#, pero eso no soluciona el problema de la biblioteca.

CodeGear (formalmente Borland) tiene una herramienta para going from C# to Delphi que funciona bien. Asumiría que las herramientas que van en la otra dirección funcionarán igual (requieren mucha edición). Aquí hay una herramienta sueca que funciona con el mismo principio CodeDOM para ir desde Delphi to C# (y un número de otros idiomas). Hay otros, simplemente no puedo encontrarlos ahora.

Otra opción sería actualizar a una versión más resentida de Delphi para .NET y portar su código a .NET de esa manera. Una vez que lo hagas funcionar en Delphi para .NET (que será bastante fácil, excepto para la base de datos incrustada, a menos que tengan una versión de .NET) puede usar .NET Reflector y File Disassembler invierta la IL a C#. Seguirá utilizando VCL, pero puede usar C# en lugar de Object pascal.

Otra solución similar sería portarlo a Oxygene by RemObjects. Creo que tienen una ruta de migración Delphi Win32 a WinForms. Luego use .NET Reflector y File Disassembler invierta la IL a C#.

En resumen, no hay respuestas fáciles. La migración de idiomas es más fácil que la migración de bibliotecas. Mucho de esto depende de qué componentes de terceros usó (más allá de AbsoluteDatabase) y si realizó cualquier llamada API de Windows directamente en su aplicación.

Otra opción completamente diferente sería buscar un equipo off-shore para mantener la aplicación. Probablemente puedan hacerlo a bajo costo. Podría encontrar a alguien en el país, pero le costaría más sin duda (aunque con el dólar débil y el mercado de trabajo pobre, nunca se sabe ...)

¡Buena suerte!

4

Muchos de mis usuarios se están moviendo a Vista que puede ejecutar la aplicación en modo de compatibilidad o puede tener problemas GPF dependiendo de cómo su PC está configurado por su departamento de TI, por lo que tengo que hacer alguna mantenimiento en la aplicación . Me pregunto si debería saltar a una pila más familiar.

A menos que esté haciendo algo no estándar, las aplicaciones D7 deberían funcionar bien en Vista.

En cuanto a la conversión a C#, creo que la mayoría de las herramientas de conversión serían una pérdida de tiempo. Un mejor enfoque puede ser reescribir la aplicación desde cero.

2

No hay una respuesta fácil, pero tenga en cuenta que la variante Delphi.net del lenguaje se dirige al tiempo de ejecución .net, y que los diferentes idiomas en .net pueden interoperar estrechamente.

Puede intentar compilarlo en Delphi.Net, factorizando en diferentes conjuntos y luego convirtiendo los conjuntos a mano uno por uno. El reflector podría ser un código compilado de ingeniería inversa en un esqueleto de código C# - equivalente pero sin comentarios, nombres de variables internas, etc.

Por otro lado, Delphi.net puede ser lo suficientemente bueno (TM) para este proyecto.

Pero a menos que tengas un buen banco de pruebas (supongo que no, dado el estado del arte en Delphi 7) vas a introducir errores.

5

Ha habido un informe científico de una transformación exitosa de un Proyecto Delphi de 1,5 millones de líneas a C# por John Brant. Escribió un analizador Delphi, un generador de C# y muchas reglas de transformación en el AST. Gradualmente extendiendo el conjunto de reglas, haciendo una compilación diaria, muchas pruebas de unidad, y reescribiendo partes difíciles de Delphi le permitieron con un equipo de 4, entre los cuales algunos de los desarrolladores originales, con profundos conocimientos de Delphi & C#, migrar el software en 18 meses. John Brant es el desarrollador original del navegador de refactorización y el kit de construcción del compilador SmaCC, es poco probable que pueda ir tan rápido

Cuestiones relacionadas