2010-11-12 1 views
5

Ive un news server Costruito su Delphi7, utilizzando Indy9 TIdTCPServer, ed i clienti stanno usando TClientSocket da ScktComp per le dimensioni, e il traffico è crittografato in RC4 (stringa)Passaggio da Delphi7 a Delphi XE o 2010 per Unicode?

cosa esattamente ho bisogno di fare il mio app funziona su XE o 2010 con supporto Unicode? quale di queste cose dovrò cambiare?

risposta

-3

Per prima cosa dovrai PRENDERE CURA delle STRINGS di default il tipo STRING è WideString questo significa che ogni carattere ha 2 byte - per migrazione rapida raccomanderei di sostituire tutte le occorrenze "stringa" con AnsiString e quindi di aggiornare gradualmente le parti del codice per fornire supporto Unicode. CONSERVARE che Indy è la parte in cui dovrai lavorare molto, MA sei fortunato perché puoi cercare SO per le risposte ai tuoi problemi ...

+1

No, questo è esattamente il modo sbagliato di avvicinarlo. La maggior parte del codice che avrà un problema è il codice che presuppone che un Char = 1 byte, e che il codice del compilatore ti avviserà e che puoi correggere o correggere secondo necessità. L'altra area comune di problemi è quella in cui qualcuno ha erroneamente utilizzato un buffer di caratteri come titolare di dati binari. Il modo giusto è compilare il codice COSÌ COM'È, e affrontare eventuali problemi che devono essere risolti in modo specifico. E Indy 10 non ha bisogno di essere corretto a tutti per Unicode, in quanto l'ultimo è già stato risolto; devi solo correggere le incompatibilità tra Indy 9 e 10. –

+3

La stringa è _not_ WideString in Delphi 2009. È il nuovo tipo UnicodeString conteggiato come riferimento e copy-on-write come il vecchio AnsiString. –

+0

ho fatto come Mr.Mohammed Nasman ha detto, mi sto trasferendo su Indy10 First, quindi, il prossimo passo è provare a compilare sotto XE e sostituire tutte le stringhe necessarie con UnicodeString? non penso che tutto questo, c'è qualche tutorial o articolo che può aiutarmi a fare questo? – killercode

0

Non so se Indy 9 è ancora supportato su XE e 2010. Indy 10 presenta miglioramenti ma anche alcune modifiche. Spostare i dati binari in stringhe è IMHO mai una buona scelta, ma a seconda della situazione potrebbe essere necessario qualche piccolo cambiamento. Ciò di cui hai esattamente bisogno dipende dal codice dell'applicazione - senza guardarlo è difficile dirlo. Tutte le routine di manipolazione delle stringhe dovrebbero essere controllate, specialmente se le si usano come buffer binari di basso livello e si seleziona quale percorso è meglio portarle nel mondo Unicode.

+0

per esempio: risultato: = RC4 (memo1.text, 'password') ;, im usando le stringhe nude, non so se questo è ciò che intendi? – killercode

+0

1) Memo1.text sarà UnicodeString. 2) La password costante e, come risultato, se è di tipo stringa. La funzione RC4 è in grado di farcela? –

+0

@killercode: funzioni di crittografia come RC4 e funzioni di hashing come MD5 non sono pensate per essere eseguite su stringhe; sono destinati ai byte hash. Assicurati di avere lo stesso array di byte in Delphi 7 e in Unicode Delphi, e la crittografia e l'hashing funzioneranno correttamente. Anche eseguirli su stringhe falliranno nelle versioni Delphi non unicode (come Delphi 7) se li usi con caratteri 'high-bit non ASCII' su sistemi con codifiche di caratteri differenti. –

5

Unicode ha introdotto in Delphi 2009, quindi se si desidera che il supporto Unicode è possibile farlo con Delphi 2009.

Ma se avete intenzione di aggiornare, ottenere il più recente, è possibile ottenere tutti i vantaggi di Delphi 2010 con meno errori e più strumenti di terze parti in bundle con Delphi XE.

l'altro problema può si faccia è la traduzione tra Indy 9 a Indy 10, poiché il supporto unicode aggiunto al Indy 10, ma anche che è compatibile al 100% con Indy 9.

vi consiglio di provare a compilare la tua applicazione con Delphi 7 e Indy 10, poi spostati in seguito a Delphi XE con Indy 10.

+1

ok, ma ho sentito che indy10 è ancora instabile ?? !! – killercode

+1

la versione in bundle di indy 9 e indy 10 ha alcuni bug, ma è possibile ottenerla direttamente dal sito Web di indyproject che ha una versione molto migliore di quella in bundle. –

+2

killercode: hai sentito male. –