5 votes

Déplacer le projet de Delphi 3 à Delphi 2010

J'ai été invité à rouvrir un projet que j'ai écrit en 1998/99 en Delphi 3 et qui fonctionne de manière stable depuis. J'ai la base de code Delphi 3 sur un ordinateur Windows 98 vieillissant qui n'existe que pour maintenir ce projet en vie. Évidemment, j'aimerais mettre la base de code à jour avant d'entreprendre des révisions majeures.

Je note avec joie que Delphi 2010 (je suis actuellement sur 2007) prétend pouvoir importer des projets à partir de Delphi 2. Quelqu'un a-t-il de l'expérience dans l'importation de grands projets à partir de Delphi 3 ? Puis-je m'attendre à ce que cette transition soit facile ou difficile ?

De plus, le projet original utilise des composants tiers, y compris DBISAM, WPTools et TMS Planner. Je note que tous ces composants sont toujours disponibles pour la dernière version de Delphi. En supposant que j'installe d'abord les nouvelles versions dans Delphi 2010, puis-je m'attendre à ce que les parties de mon application utilisant ces composants soient également traduites ? Je sais qu'au moins WPTools a modifié certaines de ses structures de composants et interfaces depuis la version utilisée dans l'application originale et évidemment, j'aurai du recodage à faire, mais l'échec de ces parties du programme empêchera-t-il entièrement ma base de code d'être mise à jour ?

6voto

skamradt Points 13049

Il devrait être très possible de faire cette migration, et en fonction de la façon dont votre code est écrit, cela peut être douloureux ou sans douleur. Malheureusement, il n'est pas facile de dire lequel jusqu'à ce que vous commenciez le processus de migration.

La première chose que je ferais serait de m'assurer que TOUS les fichiers DFM sont convertis en leur représentation texte. Je crois que cela a été défini par défaut dans les versions ultérieures de Delphi mais, si je me souviens bien, Delphi 3 utilisait un format binaire. Il devrait y avoir un fichier utilitaire nommé DFMConvert ou quelque chose dans le répertoire bin de Delphi 3 qui vous permet de convertir un DFM en texte. La raison pour laquelle vous voudrez faire cela est de vous assurer que vous pouvez lire la source si vous devez effectuer une modification manuelle du DFM en raison d'un composant qui ne se charge pas. Non seulement vous sautez des versions de Delphi, mais vous sautez également des versions de CHAQUE composant que vous utilisez et il peut y avoir quelques incompatibilités qui peuvent causer l'échec de chargement d'un composant. J'ai trouvé que si c'est le cas et que vous avez une "nouvelle" version, alors utilisez l'édition de la source du DFM directement et comparez un formulaire de test avec le composant dessus par rapport à ce que votre ancienne version contient. Supprimez tout ce qui est hors de place (ou renommez-le) et essayez de charger le formulaire à nouveau.

Comme Frabricio l'a mentionné, si vous utilisez des variants, vous devrez apporter des ajustements mineurs à votre clause uses.

La bonne nouvelle est que votre code lui-même devrait fonctionner correctement une fois que vous aurez corrigé les composants/clause uses. Si vous passez directement à Delphi 2010, votre seul autre problème serait l'Unicode et le compilateur fait un travail fantastique en vous signalant toutes les erreurs et avertissements.

5voto

Fabricio Araujo Points 2687

Comme vous avez D2007 et en supposant que tous ces ensembles de composants viennent également avec les dcus de D2007, je vous conseillerais d'essayer d'abord de réouvrir la base de code sur D2007. Et après cela, passez à D2010 en raison de la fonction Unicode du VCL actuel - qui peut créer certains problèmes de migration (que je ne discuterai pas ici car c'est largement discuté sur le web et ici sur SO).

Je dirais cela parce qu'entre D5 et D7 (je ne me souviens pas exactement), il y a eu une réorganisation des unités du rtl (avec la création de l'unité Variants.pas et de nombreuses unités OTAPI ont changé de nom, etc). Donc, c'est là que vos premiers problèmes apparaîtront. ÉDITÉ: Non seulement Variants a été déplacé, mais aussi beaucoup de trucs d'intégration de l'IDE - pour éviter que du code non autorisé ne soit déployé. Si vous avez un code OTAPI (par exemple, du code qui permet des propriétés publiées sur des formulaires hérités), il faudra le déplacer vers un projet de package.

Comme skramradt l'a dit, vous devrez peut-être gérer le truc DFM binaire....

Après cela, si tout fonctionne, passez à la fonction Unicode. Selon l'application, cela peut être facile ou non. Pour les miennes, ce n'est pas d'une grande nuisance. Mais je sais qu'il y en a d'autres qui rencontrent plus de problèmes avec cela que moi.

4voto

Martin Girling Points 31

Voici quelques notes que nous avons prises concernant la mise à niveau vers Delphi 2010

  1. Les exécutables compilés en Delphi2010 occupent environ 3 fois plus d'octets que ceux compilés par Delphi3.
  2. Toute compilation générera beaucoup plus d'avertissements et d'indications que Delphi3. Il est bon de supprimer tous les avertissements et indications.
  3. J'ai trouvé plusieurs fichiers Pascal corrompus qui se compilent bien dans Delphi3 mais pas dans Delphi2010. Visuellement, il n'y a aucun problème ou différence apparente. Cependant, les erreurs de compilation indiquent clairement l'erreur sur le mauvais numéro de ligne. Dans mes exemples, le problème était lié à CR / LF, dans mon Delphi il n'y avait que CR. Un problème difficile à résoudre et une perte de temps réelle. Cependant, le texte peut être visualisé dans Notepad ou en utilisant WinHex.exe. J'ai écrit un programme appelé PARSER.EXE, qui permet d'identifier ces caractères de contrôle. C'est la meilleure façon de modifier ces fichiers dans Notepad une fois que vous savez où se trouvent les caractères de contrôle.
  4. AnsiString. Delphi 2010 utilise désormais les AnsiStrings, MBCS et WideStrings (UniCode). Contrairement à Delphi 3 qui utilisait des chaînes ASCII. L'implémentation standard de Delphi 2010 utilise des chaînes en Unicode et des caractères en 16 bits. Il est désormais nécessaire de s'assurer que de nombreuses chaînes ASCII en 8 bits sont définies en tant qu'AnsiStrings. Évidemment, les anciennes dll qui avaient des interfaces définies avec PChars nécessitent maintenant PAnsiChar.
  5. Le code n'est pas interchangeable entre les plates-formes Delphi pour les raisons suivantes
  6. Delphi 2010 dispose de fonctions supplémentaires et de types de variables tels que AnsiChar, AnsiStrings.
  7. Les formulaires ne sont pas compatibles entre les versions car les versions ultérieures de Delphi ont des propriétés supplémentaires.
  8. Les dcus ne sont pas compatibles entre les versions.
  9. Les packages ne sont pas compatibles entre les versions. Il n'y a pas de Crystal Reports dans Delphi 2010, vous devrez peut-être l'acheter séparément. Tout autre package utilisé peut également nécessiter une mise à niveau, à un coût.
  10. De nombreuses fonctions, telles que Readfile, Writefile, GettickCount exigent désormais des paramètres en tant que DWORD, alors que Delphi3 était plus tolérant. Certaines de ces fonctions sont associées à des capacités de disque supérieures.
  11. Menus contextuels. Ceux-ci ont une nouvelle propriété appelée AUTOHOTKEY. Cela devrait être défini sur manuel. Si cela est défini par défaut, les libellés auront '&' insérés pour fournir une fonctionnalité de touche de raccourci.
  12. Curseurs. La méthode d'utilisation des curseurs a changé.
  13. Il semble que Delphi2010 a beaucoup plus de fonctionnalités qui ont été ajoutées au détriment de sa simplicité d'utilisation. Probablement que Delphi 3 avait une interface meilleure et plus facile à utiliser.
  14. Aide. Peut-être meilleure que Delphi 3. Mais semble disparaître pendant quelques minutes en essayant de trouver des informations d'aide. L'aide interactive est une nuisance.
  15. BorlandMM.dll ne fonctionne pas sur Windows 2000 avec les applications Delphi 2010. Vous devrez peut-être mettre à jour un tas de PC si vous souhaitez utiliser cette dll.

J'ai environ 100 applications dlls et serveurs COM à mettre à niveau. Probablement environ 12 semaines de travail avec la mise en service. J'espère que cela vous aidera.

3voto

lkessler Points 11143

Juste pour vous rassurer, j'ai récemment converti le logiciel que je développe de Delphi 4 à Delphi 2009 pour bénéficier des capacités Unicode, et j'ai eu quelques problèmes, mais ils étaient tous résolus en quelques semaines.

Une chose à noter : Si vous utilisez des packages tiers, assurez-vous qu'ils ont une version Delphi 2010 disponible vers laquelle vous pouvez mettre à niveau avant de convertir. Delphi 2009 serait correct, mais je ne recommande pas d'utiliser des packages plus anciens dans D2010.

1voto

Kjartan Points 131

Je ne peux pas dire grand-chose sur la migration de D3 à D2010, mais j'ai récemment réussi à migrer de D6 à D2010. Pour commencer, ce que j'ai fait était de m'assurer que tous les composants tiers que vous avez utilisés en D3 sont également disponibles en D2010. Recompilez tous les composants personnalisés construits de D6 à D2010. Chargé mon code source D6, et compiler. Gérer tous les problèmes d'unicode. Gérer toutes les erreurs de compilation une par une... tout cela fait en environ 3 jours (environ 30000 lignes de code)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X