程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 現有Delphi項目遷移到Tiburon中的注意事項(10)

現有Delphi項目遷移到Tiburon中的注意事項(10)

編輯:Delphi

其他需要注意的代碼:

AllocMem(

AnsiChar

of AnsiChar

AnsiString

of Char

Copy(

GetMem(

Length(

PAnsiChar(

Pointer(

Seek(

ShortString

string[

代碼中包含上述寫法的地方可能需要修改以適應 UnicodeString 的變化。

帶字符的集合類型

您可能需要修改下列類型:

in AnsiChar> 這樣的代碼生成的程序是正確的(>#255 的字符不會包含在集合內)。編譯器會提出 "WideChar reduced in set Operations" 的警告,基於您代碼的需要,您可以關閉這個警告,或者使用 CharInSet 函數替代。

in LeadBytes 全局的 LeadBytes 變量包含的是本地 MBCS Ansi 字符的集合。UTF-16 格式也有 LeadChar 的概念((#$D800 - #$DBFF 是高 surrogate, #$DC00 - #$DFFF 是低 surrogate)。因此建議使用 overload 函數 IsLeadChar 來判斷,該函數的 ANSI 版本檢測 LeadBytes,WideChar 版本檢測 high/low surrogate。

字符分類 使用靜態類 TCharacter。Character 單元中提供了一些函數對字符分類:IsDigit, IsLetter, IsLetterOrDigit, IsSymbol, IsWhiteSpace, IsSurrogatePair,等等。

應當心這些結構

您需要檢查下列可能引起錯誤的結構:

模糊的類型轉換

AnsiString(Pointer(foo))

檢查正確性:代碼是什麼意圖?

可疑的類型轉換引發的警告

PChar()

PAnsiChar()

直接建立、操作、訪問 string 的內部結構。例如 AnsiString 的內部結構已經發生變化,所以這樣的操作是危險的。您應該使用 StringRefCount, StringCodePage, StringElementSize 等方法來獲得額外信息。

控件和類

TStrings: 內部存儲的是 UnicodeStrings。

TWideString:(可能被廢棄)沒有更改,內部使用 WideString (BSTR)

TStringStream

被重寫成內部存儲 ANSI 字符

字符編碼可以被重載

考慮使用 TStringBuilder 替代 TStringStream 來逐步構建字符串

TEncoding

Default 屬性是用戶活動頁碼(users’ active code page)

支持 UTF-8

支持 UTF-16, big 和 little endian

支持 Byte Order Mark (BOM)

您可以繼承子類實現特殊的編碼

Byte Order Mark

BOM 必須添加到文件中以便判斷文件的編碼方式。

UTF-8 使用 EF BB EF

UTF-16 Little Endian 使用 FF FE

UTF-16 Big Endian 使用 FE FF

做好這些注意事項,將幫助您順利地把舊有項目遷移到 Tiburon 的 Unicode 下。當然,如果您開發的是多版本控件,或者是希望項目能在多個版本中編譯,您最好根據這些特性定義適當的編譯條件,以便讓代碼更好的被更低的版本的編譯器支持和編譯。

本文基於 Tiburon 幫助編寫,如有翻譯錯誤或描述不准確的地方歡迎大家指正!相信這次 Delphi / C++ Builder 2009 將是廣大愛好者最喜歡的版本之一。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved