2010-11-12 4 views
5

ive un serveur de nouvelles Construit sur Delphi7, en utilisant Indy9 TIdTCPServer, et les clients utilisent TClientSocket de ScktComp pour la taille, et le trafic est crypté en RC4 (string)Passer de Delphi7 à Delphi XE ou 2010 pour Unicode?

exactement ce que dois-je faire mon application fonctionne sur XE ou 2010 avec le support Unicode? De ces choses devrais-je changer?

Répondre

-3

D'abord, vous devrez prendre soin des chaînes par défaut type STRING est WideString cela signifie que chaque caractère a 2 octets - pour Migration rapide Je recommande de remplacer toutes les occurrences de "chaîne" par AnsiString, puis de mettre à jour étape par étape les parties du code pour fournir un support Unicode. Gardez à l'esprit que Indy est la partie où vous devrez travailler beaucoup, mais vous avez de la chance parce que vous pouvez rechercher SO pour les réponses à vos problèmes ...

+1

Non, c'est exactement la fausse façon de l'aborder. La plupart du code qui aura un problème est un code qui suppose qu'un Char = 1 octet, et ce code le compilateur vous avertira et vous pouvez corriger ou ajuster au besoin. L'autre domaine commun de problèmes est celui où quelqu'un a incorrectement utilisé un tampon de caractères en tant que détenteur de données binaires. La bonne façon est de compiler votre code TEL QUEL, et de traiter les problèmes qui ont besoin d'être résolus. Et Indy 10 n'a pas besoin d'être fixé du tout pour Unicode, car le dernier est déjà fixé; Vous n'avez qu'à corriger les incompatibilités entre Indy 9 et 10. –

+3

La chaîne est _not_ WideString dans Delphi 2009. Il s'agit du nouveau type UnicodeString qui est compté par référence et copie sur écriture comme l'ancien AnsiString. –

+0

je l'ai fait comme M.Mohammed Nasman a dit, en passant à Indy10 D'abord, donc, la prochaine étape est de compiler sous XE et de remplacer toutes les chaînes nécessaires avec UnicodeString? Je ne pense pas que c'est tout, y at-il un tutoriel ou un article qui peut m'aider à faire cela? – killercode

0

Je ne sais pas si Indy 9 est toujours pris en charge sur XE et 2010. Indy 10 a des améliorations mais aussi des changements de rupture. Déplacement de données binaires en chaînes est à mon humble avis jamais un bon choix, mais en fonction de la situation, il pourrait juste besoin de quelques changements mineurs. Ce dont vous avez exactement besoin dépend de votre code d'application - sans vraiment le regarder, c'est difficile à dire. Toutes les routines de manipulation de chaînes doivent être vérifiées, surtout si vous les utilisez comme des tampons binaires de bas niveau, et choisissez le chemin le plus approprié pour les porter dans le monde Unicode.

+0

par exemple: résultat: = RC4 (memo1.text, 'mot de passe') ;, im en utilisant des chaînes nues, ne sais pas si c'est ce que tu veux dire? – killercode

+0

1) Memo1.text sera UnicodeString. 2) Le mot de passe constant, comme résultat, s'il est de type chaîne. La fonction RC4 est-elle capable de faire face à cela? –

+0

@killercode: les fonctions de chiffrement comme RC4 et les fonctions de hachage comme MD5 ne sont pas destinées à être exécutées sur des chaînes; ils sont destinés à des octets de hachage. Assurez-vous que vous obtenez le même tableau d'octets dans Delphi 7 et votre Delphi Unicode, et le cryptage et le hachage fonctionnera très bien. Même les exécuter sur des chaînes échouera dans des versions Delphi non-unicode (comme Delphi 7) si vous les utilisez avec des caractères 'non-bit non-hauts' sur des systèmes avec des codages de caractères différents. –

5

Unicode a introduit dans Delphi 2009, donc si vous voulez que le support unicode, vous pouvez le faire avec Delphi 2009.

Mais si vous allez mettre à niveau, obtenir la plus récente, vous pouvez obtenir tous les avantages de Delphi 2010 avec moins de bugs et plus d'outils tiers fournis avec Delphi XE.

l'autre problème peut vous faire face est la traduction entre Indy 9 à Indy 10, parce que le soutien unicode ajouté à Indy 10, mais aussi ce n'est pas 100% compatible avec Indy 9.

Je vous suggère d'essayer de compiler votre application avec Delphi 7 et Indy 10, puis passez à Delphi XE avec Indy 10.

+1

ok, mais j'ai entendu indy10 est encore instable ?? !! – killercode

+1

la version groupée de indy 9 et indy 10 a quelques bugs, mais vous pouvez l'obtenir directement à partir du site Web indyproject qui a une bien meilleure version que celle fournie. –

+2

killercode: vous avez mal entendu. –

Questions connexes