我想將幾個大型應用程序從Delphi 2006移植到XE。原因不在於使用Unicode,而是爲了利用(希望)更好的IDE穩定性,本地PNG支持,更多組件,更少的VCL bug,更少依賴第三方的東西,減少對你們的影響等。的應用程序可能受益於Unicode,但目前這不是問題。目前我只想採取最直接的方法讓他們再次編譯。作爲開始,我已經將所有含糊不清的字符串聲明,即字符串改爲AnsiString或ShortString,將字符串改爲AnsiChar,並將pChar改爲pAnsiChar,然後用D2006重新編譯。到現在爲止還挺好。沒有什麼破壞將Delphi 2006應用程序移植到XE
我的問題是:從哪裏來?假設我只是向XE編譯器提供消息來源並點亮觸摸紙,那麼可能是什麼問題呢?
例如,
var
S : AnsiString ;
...
MainForm.Caption := S ;
這是否會產生一個錯誤?一個警告?我假設VCL現在是Unicode,還是將XE拉入非Unicode組件,或者轉換字符串?在XE中保留使用8位字符串的應用程序實際上是否可行?還是會有太多令人頭痛的問題?
如果最好的/最簡單的方法是Unicode,我會這樣做,即使我不會使用擴展字符,至少在不久的將來。
我想知道的另一件事是第三方的東西。我想我需要獲得與XE兼容的更新版本。
任何(肯定!)評論贊賞。
謝謝@Remy。從全球範圍的'AnsiString'回到'String'沒什麼大不了的(FART是一個很棒的工具)。有合理數量的代碼需要並採用字節大小的ASCII字符串。如果我將所有聲明都還原爲「字符串」,則XE將假定UnicodeString。當我編寫類似'if(S [3] =':')然後...'的代碼時它會警告我嗎?這是我不想忽視的情況。 – rossmcm
'':'是字符文字。字符文字和字符串文字現在是上下文相關的。當與'UnicodeString'使用的,將文字是Unicode(在'#XX' 2位數中的'#的範圍內字面的特定情況下80'-'#FF',其Unicode表示是由新的影響'HIGHCHARUNICODE'編譯器指令)。 'String','Char'和'PChar'現在都是Unicode。如果'S'是一個'UnicodeString',那麼你將比較'WideChar'和'WideChar'。如果'S'是'AnsiString',那麼你會比較'AnsiChar'和'AnsiChar'。在這兩種情況下,都不需要編譯器警告。 –
好的。 @Remy我的觀點是,如果我有現有的代碼:'var S:string;開始S:='你好'; Writeln(SomeTextFile,S);'和文件需要8位ASCII和包含字節'$ 68 $ 65 $ 6C,$ 6C,$ 5F,$ 0D,$ 0A'後代碼執行時,XE編譯器不會警告我會將S視爲Unicode而不是Asni,並且文件內容將會不同(並且錯誤)?我理解正確嗎? – rossmcm