Se esistesse un "interruttore Ansi" per Delphi 2009/2010/XE/XE2 (le versioni Unicode), si sarebbe semplicemente scambiato il problema che si ha ora, con problemi ben peggiori.
Per questo motivo, non può esserci un interruttore. Questa idea è stata discussa con attenzione, mi è capitato di sapere da conversazioni di prima mano con le persone che hanno preso la decisione, e la decisione di rompere il codice non è stata intrapresa senza due diligence. Non c'era semplicemente nessun altro modo di andare. Per rendere Delphi veramente Unicode, era essenziale l'alias String = UnicodeString.
Pertanto, è necessario modificare tutti i vostri String
dichiarazioni AnsiString
, e Char
-AnsiChar
se si desidera avere tipi di carattere e stringhe a byte singolo non Unicode nel codice dell'applicazione. Nella maggior parte del tuo codice, e nella maggior parte dei luoghi, non è necessario. Ma dove hai bisogno esplicitamente dell'elaborazione in formato byte, come i protocolli binari su RS232 e RS485, o formati di file binari (EDA, ecc.), Devi cambiare il tuo codice.
Se non si desidera effettuare il porting del codice da soli, pagare qualcuno per farlo. Ho portato su di me un'enorme libreria di componenti e applicazioni scientifiche e mi ci sono volute diverse settimane per testare e trovare tutti i bug. In seguito, ho avuto una base di codice moderna e ragionevole che non si è più rotta dal 2009 quando ho aggiornato.
Quando si arriva al divario XE/XE2, è possibile che si verifichi un po 'più di fastidio con le ipotesi del codice che i tipi di puntatore hanno le stesse dimensioni di Integer o Cardinal, che non è più vero in Win64. Ancora una volta, i ragazzi Delphi non hanno alcun desiderio di infrangere il codice, stanno solo seguendo le buone pratiche ingegneristiche, in quel caso, Win64 detta certe cose.
Perché non hanno modificato tutte le proprietà di controllo VCL in USTRING anziché String? Perché non hanno fatto in modo che ogni funzione RTL prendesse sia USTRING che STRING e fornisse sovraccarichi?
Poiché lo sviluppo Delphi normativo è ora puramente Unicode. USTRING è, e sarebbe un caso speciale. String è il tipo stringa nativo (normativo) ed è, infatti, noto anche come UnicodeString
.
Accade così che stavate già utilizzando un alias di tipo. Le stringhe in delphi 1.0 erano limitate a 255 caratteri di lunghezza. Quando hanno introdotto Delphi 2.0 e il tipo di stringa lungo, internamente chiamato AnsiString
, hanno fatto il verso alias del tipo comune esistente String come String=AnsiString
. Quando siamo arrivati a Unicode, ogni componente VCL e ogni metodo VCL che prende una stringa accetta ancora una stringa. Tuttavia, String è ora String=UnicodeString
.
Delphi 7 ha già WideString
per esempio. Non abbiamo bisogno di un passaggio a metà per unicode. Che tu lo capisca o meno, l'intero mondo di sviluppo del software ora si aspetta che i tipi di stringhe siano unicode. Delphi è parte di un fenomeno globale. Internet è unicode. Il tuo sistema operativo Windows 7 è unicode nativo puro.
Delphi ha tipi AnsiChar, AnsiString e PAnsiChar per supportare le vecchie funzionalità. –
E anche un'unità AnsiStrings. –
Si potrebbe chiedere la domanda più comune che sia mai stata posta sulla transizione Unicode. La risposta è "non è così male, basta andare oltre e portare il tuo codice". Quasi ogni componente commerciale e open source è stato scaricato 2-3 anni fa. Vieni in acqua va bene. –