2009-10-02 14 views
5

Me han pedido que reabra un proyecto que escribí en 1998/99 en Delphi 3 y que se ha estado ejecutando de forma estable desde entonces. Tengo la base de código Delphi 3 en una vieja máquina con Windows 98 que existe solo para mantener vivo este proyecto. Obviamente, me gustaría traer la base del código fuente al siglo XXI antes de emprender cualquier revisión importante.Mover proyecto de Delphi 3 a Delphi 2010

Me alegra que Delphi 2010 (actualmente estoy en 2007) afirme poder importar proyectos de Delphi 2 en adelante. ¿Alguien tiene alguna experiencia en la importación de grandes proyectos de Delphi 3? ¿Puedo esperar que sea una transición fácil o difícil?

Además, el proyecto original utiliza componentes de terceros como DBISAM, WPTools y TMS Planner. Noto que todos estos todavía están disponibles para la última versión de Delphi. Suponiendo que primero instale las nuevas versiones en Delphi 2010, ¿puedo esperar que las partes de mi aplicación que usan estos componentes también se traduzcan? Sé que al menos WPTools ha cambiado algunas de sus estructuras e interfaces de componentes desde la versión utilizada en la aplicación original y, obviamente, voy a tener que hacer algunas recodificaciones allí, pero la falla de esas partes del programa evitará que mi base de código ser actualizado en absoluto?

+0

Realmente debería evaluar primero si una recompilación con Delphi 2010 realmente traerá la aplicación "al siglo 21". Una aplicación moderna usa controles recientes y (estilo de Vista) diálogos y por lo tanto se ve totalmente diferente, admite estilos visuales, funciona con cuentas de usuario limitadas, admite Unicode (eso es mucho más que compilarlo con Delphi 2009+), no tiene problemas rutas codificadas, ... Tal vez hay tanto que cambiar y corregir que una reescritura con Delphi 2010 es una mejor propuesta. – mghie

+3

@mghie Tal vez sus planes es llevar la base de código a D2010 para unificar el entorno de desarrollo y acostumbrarse a él antes de aventurarse en una reescritura o grandes cambios. –

+0

Tendré que reescribir algo en cualquier caso ya que la base de código original (la escribí yo mismo) no es genial. Aún así, quiero saber que puedo obtener una versión de trabajo del programa en un plazo relativamente corto, a partir de ahí lo reescribiré según lo permita el proyecto. Unicode no es tan importante, esta es una aplicación de línea de negocio para una empresa cuyo negocio está estrechamente ligado a las leyes de un solo estado de los EE. UU. –

Respuesta

6

Debería ser muy posible hacer esta migración, y dependiendo de cómo se escriba su código, puede ser doloroso o indoloro. Lamentablemente, no es fácil decir cuál hasta que inicie el proceso de migración.

Lo primero que haría sería asegurarme de que TODOS los archivos DFM se conviertan a su representación de texto. Esto creo que estaba predeterminado en versiones posteriores de Delphi, pero recuerdo que Delphi 3 usó un formato binario. Debería haber un archivo de utilidad llamado DFMConvert o algo en el directorio delphi 3 bin que le permite convertir un DFM en texto. La razón por la que querrá hacer esto es asegurarse de que puede leer la fuente si tiene que realizar una edición manual del DFM debido a que un componente no se está cargando. No solo estás saltando versiones de Delphi, sino que también estás saltando versiones de CADA componente que usas y puede haber algunas incompatibilidades que pueden causar la falla de carga de un componente. He encontrado si este es el caso y usted tiene una versión "nueva", luego use la fuente de DFM para editar directamente y compare un formulario de prueba con el componente en contra de lo que contiene su versión anterior. Elimine cualquier cosa (o cambio de nombre) que esté fuera de lugar y luego intente cargar el formulario nuevamente.

Como mencionó Frabricio, si usa variantes, entonces necesitará hacer pequeños ajustes a su cláusula de uso.

La buena noticia es que el código en sí debería funcionar bien una vez que se haya corregido la cláusula de componentes/usos. Si va directamente a Delphi 2010, su único otro problema sería Unicode y el compilador hace un trabajo fantástico al señalarlos a usted a través de errores y advertencias.

+0

Thx. WRT a "puede haber algunas incompatibilidades que pueden hacer que un componente falle en la carga", ¿puede mencionar las incompatibilidades que ha experimentado? –

+0

Una de estas incompatibilidades sería un cambio de propiedad donde el nuevo componente cambia el nombre de la propiedad o ya no la admite. Esto generará un error al cargar el formulario con un error que potencialmente eliminará el componente del formulario. Al editar el DFM manualmente, puede corregir el comportamiento y cargar el formulario por completo. – skamradt

+3

La utilidad de conversión de archivos dfm se llama "convertir". – dummzeuch

5

Como tiene D2007 y suponiendo que todos estos conjuntos de componentes vienen con d2007 dcus también, voy a aconsejarle que primero intente volver a abrir la base de código en D2007. Y después de eso, vaya a D2010 debido a la característica Unicode de la VCL real, que puede crear algunos problemas de migración (que no analizaré aquí porque está muy discutido en la web y here on SO).

Yo diría que porque en algún lugar entre D5 y D7 (no grabar exactamente) ocurrió una reorganización de la unidad de la rtl (con la creación de la unidad Variants.pas y muchas unidades OTAPI cambiaron los nombres, etc.). Entonces, allí es donde surgirán tus primeros problemas. EDITAR: No solo se reubicaron las variantes, sino también muchas integraciones de IDE, para evitar que se implemente código sin licencia. Si tiene algún código OTAPI (por ejemplo, código que permite propiedades publicadas en formularios heredados), tendrá que ser reubicado en un proyecto de paquete.

Como skramradt dicho, puede que tenga que hacer frente a lo DFM binaria ....

Después de eso, si todo funciona, ir a lo Unicode. Dependiendo de la aplicación, puede ser fácil o no. Para los míos, no de gran molestia. Pero sé que hay otros que enfrentan mayores problemas que yo.

+0

Pero tengo entendido que no hay esperanzas de que un proyecto D3 se abra siquiera en D2007, mientras que D2010 dice que puede hacerlo. Supongo que refactorizar el RTL modificado es parte del proceso de actualización D2010. –

+0

Tanto D2007 como D2010 abrirán proyectos D3, o al menos * deberían * abrirlos. –

+0

Thx. ¿No entendí mal que la función de importación de la versión anterior es nueva en D2010? –

3

Para tranquilizarlo, recientemente convertí el software que estoy desarrollando de Delphi 4 a Delphi 2009 para obtener las capacidades de Unicode, y tuve una serie de problemas, pero todos fueron solucionables en un par de semanas.

Una cosa a tener en cuenta: si utiliza paquetes de terceros, asegúrese de que tengan disponible una versión de Delphi 2010 a la que pueda actualizar antes de realizar la conversión. Delphi 2009 estaría bien, pero no trataría de usar paquetes anteriores en D2010.

0

Confirmo lo que dicen los demás: la conversión de una aplicación D3 a D2010 suele ser fácil en lo que respecta a su propio código.

veo dos dificultades:

  1. Utilizó cadena como tampón en general, almacenar algo más que personajes.
  2. Su código asume que sizeof (char) es 1, es decir, Length() cuando se debe usar SizeOf() o viceversa.

La parte más difícil son los componentes de terceros.

Parece que todos los componentes que está utilizando todavía existen para D2010, ese es un buen punto. Pero es probable que su interfaz haya sido modificada y, por supuesto, requerirá algunos cambios de código.

0

Tengo un grupo de proyectos Delphi 7 que Delphi 2010 actualizó fácilmente. Desafortunadamente, durante el próximo inicio con los archivos del grupo del proyecto Delphi 2010 recientemente creados, , el IDE simplemente se bloquea y desaparece después de cargar el proyecto. No se muestran excepciones, no hay mensajes de error . Mi solución es usar el archivo Delphi 7 todo el tiempo y dejar que Delphi 2010 actualice lo que quiera sin usar los archivos de proyecto recién creados.

+0

¿Ha intentado volver a crear manualmente el proyecto en D2010? Es decir. Deje que Delphi cree un nuevo proyecto y luego agregue todas las unidades y configure todas las opciones del proyecto según sea necesario. –

1

No puedo decir mucho acerca de la migración de D3 a D2010, pero he migrado recientemente D6 a D2010 con éxito. Para empezar, lo que hice fue asegurarme de que todos los componentes de terceros que haya utilizado en D3 también estén disponibles en D2010. Vuelva a compilar cualquier componente personalizado de D6 a D2010. Cargué mi código fuente D6 y compilo. Maneja todos los problemas Unicode. Manejar todos los errores del compilador uno por uno ... todo hecho en aproximadamente 3 días (aproximadamente 30000 líneas de código)

4

Aquí hay algunas notas que hicimos en relación con la actualización a Delphi 2010

  1. Los ejecutables cumplido en Delphi2010 son aproximadamente 3 veces más bytes que los compilados por Delphi3.
  2. Cualquier compilación resultará en un montón de advertencias y consejos que Delphi3. Una buena práctica es eliminar todos los consejos y advertencias.
  3. He encontrado varios archivos Pascal corruptos que compilan bien en Delphi3 pero no en Delphi2010. Visualmente no aparece ningún problema o diferencia. Sin embargo, los errores de compilación indican claramente el error en el número de línea incorrecta. En mis ejemplos, el problema estaba relacionado con CR/LF, en mi Delphi solo había una CR. Un problema difícil de resolver y una pérdida de tiempo en tiempo real. Sin embargo, el texto se puede ver en el Bloc de notas o usando WinHex.exe. He escrito un programa llamado PARSER.EXE, que permite identificar estos caracteres de control.Esta es la mejor manera de editar estos archivos en el Bloc de notas una vez que sepa dónde están los caracteres de control.
  4. AnsiString. Delphi 2010 ahora usa AnsiStrings, MBCS y WideStrings, (UniCode). A diferencia de Delphi 3, que usaba cadenas ASCII. La implementación estándar de Delphi 2010 usa cadenas como Unicode y Chars como caracteres de 16 bits. Ahora es necesario asegurarse de que muchas cadenas ASCII de 8 bits se definan como AnsiStrings. Obviamente, los dlls más antiguos que tenían interfaces definidas con PChars ahora requieren PAnsiChar.
  5. El código no es intercambiable entre las plataformas Delphi por los siguientes motivos
  6. Delphi 2010 tiene funciones adicionales y tipos de variables como AnsiChar, AnsiStrings.
  7. Los formularios no son compatibles entre versiones porque las últimas versiones de Delphi tienen propiedades adicionales.
  8. dcus no son compatibles entre las versiones.
  9. Los paquetes no son compatibles entre versiones. No hay Crystal Reports en Delphi 2010, por lo que es posible que deba comprarlo por separado. Cualquier otro paquete que se usó también puede requerir una actualización, al costo.
  10. Muchas funciones, como Readfile, Writefile, GettickCount ahora insisten en los parámetros como DWORD, mientras que Delphi3 era más tolerante. Algunas de estas funciones están asociadas con mayores capacidades de disco.
  11. Menús emergentes. Estos tienen una nueva propiedad llamada AUTOHOTKEY. Esto debe establecerse en manual. Si esto está configurado como predeterminado, los subtítulos tendrán '&' insertado para proporcionar la funcionalidad de la tecla directa.
  12. Cursores. El método para usar los cursores ha cambiado.
  13. Parece que Delphi2010 tiene un montón de funciones adicionales que se han agregado a expensas de simplificar su uso. Probablemente Delphi 3 tenía una interfaz mejor y más fácil de usar.
  14. Ayuda. Tal vez mejor que Delphi 3. Pero parece desaparecer por algunos minutos tratando de encontrar información de ayuda. La ayuda interactiva es una molestia.
  15. BorlandMM.dll no funciona en Windows 2000 con aplicaciones Delphi 2010. Por lo tanto, es posible que deba actualizar una gran cantidad de PC si desea usar este dll.

Tengo aproximadamente 100 aplicaciones dlls y servidores COM para actualizar. Probablemente unas 12 semanas de trabajo con la puesta en marcha. Espero que esto ayude.

Cuestiones relacionadas