2009-05-18 6 views
5

Tengo una gran aplicación escrita en Delphi. Quiero renovarlo, comenzando con la interfaz de usuario. Pensé en usar el nuevo Qt. Durante el proceso de renovación, quiero cambiar a C++ como el lenguaje de programación. ¿Hay alguna forma de reescribir gradualmente la aplicación (comenzando con la interfaz de usuario) para cambiar a C++?Port Delphi to C++ gradualmente

Gracias por su ayuda.

+3

Estoy agregando esto como un comentario, porque mi experiencia en Delphi/Borland terminó hace años. Sin embargo, CREO que el compilador Borlands C++ también construirá archivos Delphi con éxito. Es posible que solo pueda mezclar idiomas en el mismo proyecto. Deberías probarlo. –

+3

Si es necesario realizar cambios, ¿por qué no cambiaría a delphi 2009 y se quedaría con la interfaz de usuario nativa, la VCL en lugar de QT? –

+0

¿Por qué la necesidad de cambiar de Delphi a C++? ¿Quieres plataforma cruzada? –

Respuesta

9

El mejor curso de acción depende en gran medida del entorno de desarrollo C++.

Si se trata de C++ Builder tiene dos posibilidades:

  • paquetes de uso de tiempo de ejecución en lugar de DLL normales. Esto le ahorrará muchos dolores de cabeza cuando se trata de clasificación de cadenas y mapeo de jerarquías de clases a funciones planas de DLL.

  • Utilice el código mixto. Puede mezclar código Delphi/Pascal con código C++ en el mismo proyecto. (Sólo un idioma en un solo módulo/unidad aunque)

Si se trata de cualquier otro compilador de C++:

  • seguir el camino que propone con DLL. Tienes que crear algún tipo de capa/fachada para asignar la funcionalidad de tus clases a funciones planas de DLL.

  • Si quieres seguir el camino DLL normal a pesar de que está utilizando C++ Builder puede intentar utilizar un administrador de memoria compartida como sharemem (viene con Delphi) o FastMM (SourceForge) para permitir el paso del string s en lugar de PChar s.

  • Crea .objs en lugar de .dcus para que ambos compiladores trabajen con el mismo formato de salida. Luego, únelos directamente en su programa C++. Esto es esencialmente lo mismo que con la creación de una DLL, pero es estático. Detectará ciertos tipos de errores en tiempo de compilación en lugar de tiempo de ejecución.

+0

No estoy contento con eso, pero creo que ese es el camino es. Gracias a todos por sus ideas. –

2

Convierta su aplicación Delphi a dll-s. Debería encontrar una API razonable y exponerla en dll. Luego usa ese dll-s desde la aplicación C++.

También existe la posibilidad de crear objetos COM +, pero son tecnología específica de Windows (debido a QT, supongo que tiene la intención de crear una aplicación multiplataforma).

6

Probablemente sea más fácil ir por el otro lado: reescribir la lógica de negocio en C++ y llamarla desde Delphi a través de las interfaces C. Esto es particularmente así ya que una de las fortalezas clave de Delphi es trabajar con GUI.

2

En general, aunque hay opciones de idioma hetero, siempre he encontrado que la congelación de la versión anterior, y volver a escribir una próxima versión principal en el nuevo idioma fue más eficiente en el tiempo al final.

Pero fui al revés. (Aumentando el porcentaje de C++ que finalmente transferí a Delphi)

0

Te entiendo, porque también soy un desarrollador de delphi y también quiero migrar mi código al marco de QT, es decir, en C++. Quiero alcanzar el objetivo de la plataforma cruzada: descarté la solución dll para mantener el código fuente original, porque me obliga a mantener Delphi IDE en modo de espera. No quiero volver a escribir/corregir/mejorar el código delphi nuevamente. ¡Quiero evolucionar! La única opción que veo es volver a escribir código de Delphi en C++ y recompilar con Qt Creator (en detalle, se volverá a compilar con g ++ compilador MinGW invocada por Qt Creator.)

volver a escribir el código que ofrecerá la posibilidad de refactorizar sus clases para cumplir con "QTed". La interfaz gráfica de usuario también se reescribirá por completo, porque VCL está impulsada por eventos, QT en cambio es impulsada por señales, pero creo que ya lo sabes.

Recuerde: mantener su código Delphi intacto y compilarlo en una biblioteca dll o compilarlo en objs, le obligará a mantener el mantenimiento de la fuente delphi.

+0

La plataforma cruzada se puede lograr más fácilmente con CodeTyphon. Es un potente paquete de instalación de un clic para el desarrollo pascal nativo multiplataforma. Ya es compatible con 4 servidores de CPU/sistema operativo (Win32, Win64, Linux32, Linux64) y 16 objetivos de CPU/sistema operativo (arm-Wince, arm-Linux, arm-Embedded, arm-gba, arm-nds, i386-Win32, i386 -Linux, i386-FreeBSD, i386-Haiku, x86_64-Win64, x86_64-Linux, x86_64-FreeBSD, powerpc-Linux, powerpc64-Linux, sparc-Linux, sparc-Solaris). Más son compatibles con Lazarus/FreePascal. http://www.pilotlogic.com/sitejoom/index.php?option=com_content&view=article&id=96&Itemid=148 – avra

1

Tengo la misma necesidad: migrar proyecto de 9 años con aproximadamente 300K + líneas de código de D2010 a QT 4.6. decidí hacer lo siguiente:

  1. Portuarias las dependencias ADO para conductor SQLite en Delphi usando DISql3.
  2. Migre mi base de datos MS a SQLite
  3. Elimine los módulos de datos colocando controles db en las clases de acceso a los datos del contenedor y los otros controles dependientes de la interfaz de usuario como ImageLists en los formularios.
  4. Separe claramente los Modelos (Acceso Db), Vistas (Formas) y controladores. Empiece de esta manera Puedo comenzar a portar los Modelos y Controladores y realizar pruebas unitarias gradualmente.
  5. Finalmente migre las Vistas (Formularios) a los cuadros de diálogo QT. Esta es la parte más difícil ya que una aplicación promedio depende de al menos 3-4 controles de terceros. Por ejemplo, yo utilizo en gran medida DevExpress para VCL y tengo la intención de reemplazarlo con QTitan (http://www.devmachines.com/qtitan_grid_overview.php)

Actualmente estoy en la etapa 2, pero bastante seguro de que el incremento enfoque funcionará.